【发布时间】:2013-04-05 15:31:28
【问题描述】:
我正在开发一些由利用实体框架的 DAL 支持的 WCF 服务。客户端、服务和 DAL 通过数据传输对象 (DTO) 以 WCF 数据合同的形式相互通信。 (来自 EF 的 Entity 对象被封装在 DAL 中)。
为了尽量减少网络上的数据量,我想支持稀疏 DTO 的传输——对象中总字段的子集。
例如,假设我有这样的 DTO:
public class widget
{
public string ID { get; set; }
public string Name { get; set: }
public int Amount { get; set; }
public string Color { get; set; }
}
说对象的原始状态是:
ID = "xxx"
Name = "flux capacitor"
Amount = 42
Color = "purple"
现在,客户端可能想要显示系统中所有小部件的列表,因此向服务请求所有小部件的列表,但只请求ID 和Name 字段。
第一个问题:在这种情况下如何向客户端发送稀疏 DTO?我知道 DataMembers 在 DataContracts 中是可选的,但我不确定初始化它的代码是什么样的。只需填写要求的字段?
现在假设 UI 中的 Name 字段是可编辑的,并且用户更改了 xxx 小部件的名称。客户端通过发送的服务触发更新:
ID = "xxx"
Name = "a new name"
此时,我希望能够检测到只有 Name 字段发生了变化,并触发 DAL 中实体的更新。 下一个问题是:我怎么知道客户端发送了一个 DTO,其中只指定了 ID 和 Name 字段?
【问题讨论】:
-
...我已经考虑过跟踪发出的 DTO 的方法,因此我可以比较返回系统的 DTO。只是不确定如何处理未指定的字段。我不想为未指定的
Color字段取回一个空字符串,然后用空字符串值更新数据库...
标签: .net wcf entity-framework dto