0

我正在开发一些由利用实体框架的 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"

现在,客户端可能想要显示系统中所有小部件的列表,因此从服务请求所有小部件的列表,但只请求IDName字段。

第一个问题:在这种情况下,如何向客户端发送稀疏 DTO?我知道 DataMembers 在 DataContracts 中是可选的,但我不确定初始化它的代码是什么样的。只需填写要求的字段?

现在假设NameUI 中的字段是可编辑的,并且用户更改了 xxx 小部件的名称。客户端触发来自服务发送的更新:

ID = "xxx"
Name = "a new name"

此时,我希望能够检测到只有Name字段已更改并触发 DAL 中实体的更新。下一个问题是:我怎么知道客户端发送了一个 DTO,其中只指定了IDandName字段?

4

1 回答 1

1

我决定做的是为所有原始字段创建具有可为空类型的 DTO。这样,当 DTO 来自客户端请求时,代码可以检查 NULL。如果为 NULL,则客户端未指定该字段。否则,从 EF 获取值并将其设置在 Entity 实例上,并让数据库上下文找出发生了什么变化......

于 2013-04-08T15:13:56.610 回答