【问题标题】:Persisting multiple DTOs mapped to a single entity持久化映射到单个实体的多个 DTO
【发布时间】:2011-07-16 00:54:36
【问题描述】:

我想这在 here 之前已经被问过了,但我仍然对要采取的正确方法感到困惑。

我有一个 WPF 客户端应用程序,它与 WCF 服务对话以检索数据。 在服务方面,我有一个大实体(大约 25 个属性),我有 我的客户端应用程序中的三个表单。 在每个表单上,我都需要工具来编辑我的域实体的某些属性。 我不想通过服务返回大型实体,因为我只需要每个表单上的 3-4 个属性。 因此,我创建了三个 DTO(我们使用 AutoMapper),每个屏幕一个。 该服务返回 DTO,就检索而言,这工作得很好。

我的问题是如何坚持我的 DTO。 我们在服务层使用 NHibernate。 如果我将部分 DTO 传递给服务以进行持久化,则每次都需要重新加载大型实体以执行更新。

这是处理这种情况的唯一方法吗?

如果我需要在 UI 上显示单个实体的部分视图......除了通过网络发送整个实体......或创建三个 DTO,我还有哪些其他选择?

谢谢。

【问题讨论】:

    标签: nhibernate mapping entity dto


    【解决方案1】:

    在服务层中使用 NHibernate 是合乎逻辑的,您需要:

    a) 在服务的更新操作期间加载实体,修改所需的属性,然后提交您的事务,或者

    b) 如果您的对象已经在服务中可用(但未与 NHibernate 会话关联),那么您可以修改所需的属性,调用 session.Update(obj) 将对象与会话重新关联,然后提交您的交易。

    我们经常使用第一种方法,因为我们的模型中有数百个不同的实体。我们将专门的命令请求对象从客户端传递到服务器,然后我们的服务层负责执行命令请求中指定的工作。

    或者,您可以按照here 的概述制定 HQL 查询。但这很快就会变得非常丑陋且难以维护。

    【讨论】:

    • 谢谢.. 我想我必须在更新期间加载实体。 HQL 变得相当混乱!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2015-01-07
    • 2022-01-23
    相关资源
    最近更新 更多