我正在开发一些由利用实体框架的 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 中是可选的,但我不确定初始化它的代码是什么样的。只需填写要求的字段?
现在假设Name
UI 中的字段是可编辑的,并且用户更改了 xxx 小部件的名称。客户端触发来自服务发送的更新:
ID = "xxx"
Name = "a new name"
此时,我希望能够检测到只有Name
字段已更改并触发 DAL 中实体的更新。下一个问题是:我怎么知道客户端发送了一个 DTO,其中只指定了ID
andName
字段?