我想在here之前已经问过这个问题,但我仍然对正确的方法感到困惑。
我有一个WPF客户端应用程序,它与WCF服务通信以检索数据。 在服务方面,我有一个大型实体(大约25个属性),我有 我的客户端应用程序中的三个表 在每个表单上,我需要工具来编辑我的域实体的某些属性。 我不希望通过服务返回大型实体,因为我在每个表单上只需要3-4个属性。 因此我创建了三个DTO(我们使用AutoMapper),每个屏幕一个。 该服务返回DTO,就检索而言,这非常正常。
我的问题是如何坚持我的DTO。 我们在服务层使用NHibernate。 如果我将部分DTO传递给要保留的服务,我需要每次都重新加载我的大型实体来执行更新。
这是处理这种情况的唯一方法吗?
如果我需要在UI上显示单个实体的部分视图,我还有哪些其他选项..除了通过线路发送整个实体..还是创建三个DTO?
感谢。
答案 0 :(得分:1)
在服务层使用NHibernate,您需要:
a)在服务的更新操作期间加载实体,修改所需的属性,然后提交您的交易,或
b)如果您的服务对象已经可用(但与NHibernate会话无关),那么您可以修改所需的属性,调用session.Update(obj)以将对象与会话重新关联,然后提交交易。
我们定期使用第一种方法,我们的模型中有数百个不同的实体。我们将专门的命令请求对象从客户端传递给服务器,然后我们的服务层负责执行命令请求中指定的工作。
或者,您可以按照here概述制定HQL查询。但这很快就会变得难看并难以维持。