如何将 NHibernate 和 DTO 与 RIA 服务结合使用

2024-05-04

我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用。我创建 DTO 来通过 RIA 服务传输数据,而不是分发我的域层对象(根据 Martin Fowler 的分布式对象设计第一定律:“不要分发您的对象!” )。 DTO 对象从域层中的五个相应层展平为两层。

这是我的问题。在 Silverlight 4 中进行更改后,RIA 服务知道哪些 DTO 对象已被修改,但在服务器端更新代码中,我需要将更改传输回“真实”域层对象,以便 NHibernate 可以将这些更改应用回数据库。最好的方法是什么?

由于 DTO 旨在轻量级,仅包含客户端所需的信息,因此我显然会not想要将相应的域对象嵌入到 DTO 中。

以下是我考虑过的一些可能性:

1) 在 DTO 对象中保存对域对象的引用。只要only引用被序列化并通过网络发送,not整个引用的对象,那么这可能是一个合理的方法。当然,这些引用在客户端是无效的,因为它们会指向不存在的内存位置,但在旅程结束时,它们可以在服务器端使用。 (?)

2) 与上面相同,但仅在 DTO 对象中保存对域聚合根的引用。然后使用对象关系遍历来获取其他相关的领域对象。

3) 将域对象的 ID 存储在 DTO 中,并使用 NHibernate 的“按 ID 获取”或“按 ID 加载”功能来检索正确的域对象,以便应用更新。

4)同上,但仅对聚合根使用“Get”或“Load”,然后对所有相关对象进行遍历。

也许以上都不理想,还有更好的方法……


每当我在 ORM 之上构建访问层时,我通常会继续将实体的唯一键放入 DTO 中,以便进行跟踪,当然在添加的情况下支持默认(T)。

然后,当对象返回到服务器端时,我可以轻松执行加载,从 DTO 编组更改的值,然后让会话保存它或执行显式保存。

这将是你的 3/4。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 NHibernate 和 DTO 与 RIA 服务结合使用 的相关文章

随机推荐

  • 保存并加载 .bat 游戏

    我正在制作一个用bat编写的文本游戏 并且游戏已经完成 或者更多 其中的很大一部分 例如命令 以及可以玩它的阶段 但是 我想添加保存游戏并再次加载的功能 我认为可以通过让 bat 文件写入需要保存的变量 例如项目变量 来做到这一点 但是 我
  • 新主题产品给出“ValueError:主题 my.theme 不可用”

    我使用这些说明通过 zopeskel 创建了一个新主题http docs plone org adapt and extend theming theme product with diazo html http docs plone or
  • Android:OneSignal 如何使用自定义图标或应用程序图标更改通知账单图标?

    收到通知时 将显示帐单图标 而不是我覆盖它以从代码中显示的应用程序图标或自定义图标 我可以从仪表板更改图标 但我想从代码中处理它 内化 OneSignal startInit this inFocusDisplaying OneSignal
  • 这些比较应该返回什么?

    我有一个使用 string compare string string 对某些值进行排序的应用程序 我不明白的是为什么 1022 比较小于 10 23 而 10 23 比较小于 1024 是否有特定于 值的东西导致了这个结果 string
  • 找不到“folly/Portability.h”文件 React 库

    我的 React Native 项目在 Xcode 上遇到构建失败 错误是 folly Portability h file not found 在过去的几天里 我一直在尝试自己解决这个问题 但无法解决 RN info React Nati
  • 如何让 ckeditor 停止删除空 div

    stackoverflow 上也有类似的问题 但这些问题的答案对我不起作用 所以请不要将其标记为重复 在我的 cms 中 我希望人们能够添加 SPA 单页应用程序 内容页面 此类应用程序通常只有一个具有某些属性的 div 并且使用 java
  • android 设置按下 Enter 键时隐藏键盘(在 EditText 中)

    When my user press Enter on the virtual android user validate entry keyboard my keyboard stay visible Why 这是我的 Java 代码 p
  • 使用自签名证书将本地 Docker 镜像推送到私有存储库

    我正在尝试推送图像 比如说foo bar 从我的本地 Docker 注册表到在 OpenShift 3 11 上运行的注册表 实际上迷你换档 https github com minishift minishiftv1 33 0 ba294
  • 尝试将 CLI 登录到 Firebase 时出现“出现问题”

    大约 2 年后 我重新开始使用 Firebase 现在我在尝试将 CLI 登录到 Firebase 时遇到问题 是的 我已经安装了npm i g firebase tools 我已经尝试了 3 个不同的命令 所有这些命令都会生成下面的图像之
  • WCF:配置已知类型

    我想知道如何在 WCF 中配置已知类型 例如 我有一个Person类和一个Employee班级 这Employee类是 的子类Person班级 两个类都标有 DataContract 属性 我不想对类的已知类型进行硬编码 例如将 Servi
  • xamarin 谷歌地图不工作

    我使用以下链接创建了地图http developer xamarin com guides android platform features maps and location maps part 2 maps api http deve
  • 在正投影中绘制世界地图给出“非有限点”

    我有一个世界国家的形状文件 从下载here http thematicmapping org downloads TM WORLD BORDERS 0 3 zip 我可以使用 R 在 R 中绘制它 countries lt readOGR
  • 如何将异步函数传递给 Python 中的线程目标?

    我有以下代码 async some callback args await some function 我需要将它作为目标传递给线程 thread threading Thread target some callback args som
  • 查找返回的 mysql 结果中的行数(nodejs)

    当使用 felixge 的 mysql for node js 时 如何向结果对象询问返回的行数 我有一个相当昂贵的查询 所以我不想运行COUNT 首先 只是为了第二次运行查询 如果是选择查询 则只需获取返回数组的长度即可 connecti
  • 如何获取 Visual Studio 2017 的离线安装程序?

    我最近尝试安装视觉工作室 2017 但没有离线安装程序 如何获取它的离线安装程序 我也尝试安装Xamarin 尽管我有最新的安卓软件开发工具包 它要求我下载安卓软件开发工具包再次 如何纠正 提前致谢 要生成离线安装程序 您首先需要下载相应的
  • 如何在 NetBeans 中执行“git Blame”?

    NetBeans 内置了对 git 的支持 我可以做一个git blame在 NetBeans 内 如果是这样 怎么办 I googled https www google nl search q netbeans git blame它 但
  • 为什么 Resources.Load 返回 null?

    我的项目有多个精灵 位于 Assets Sprites 中 我想使用 C 脚本加载它们 我已经测试过这个 Sprite myFruit Resources Load
  • 使用服务器帐户模拟用户以访问其 Google 云端硬盘时出现 401 未经授权错误

    我正在用 Java 编写一个后端进程 它将模拟用户并在其 Google Drive 上添加 删除文档 服务器帐户似乎验证正确 但是当我尝试冒充用户时 我得到一个401 Unauthorized error 请参阅下面的详细信息 配置 我已配
  • Python:Tkinter Treeview 可搜索

    相当直接的问题 尽管我用了最好的谷歌搜索 但我找不到任何相关内容 我有一个 Python 应用程序 它使用 Tkinter Treeview 小部件作为表格 这对于我需要使用它的用途来说效果很好 但最终会在一些树中出现几百个项目 无论如何
  • 如何将 NHibernate 和 DTO 与 RIA 服务结合使用

    我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用 我创建 DTO 来通过 RIA 服务传输数据 而不是分发我的域层对象 根据 Martin Fowler 的分布式对象设计第一定律 不要分发您的对象 DTO