我们有一个n层应用程序,包括一个数据库,在它上面的EF4,然后是WCF服务,最后是一个silverlight 4客户端。
我们正在考虑更新单个实体属性的最佳方法是什么。我们有一个客户实体,有大约15个属性。现在,在客户端中,用户已更改客户名称属性,并希望将此更改保存到数据库。因此,请记住两种方法:
1)只需通过WCF服务发送整个Customer实体并更新数据库。这很简单,因为在服务器的Update方法中,我们需要做的就是将传入的实体附加到上下文,将它的objectState更改为modified,然后点击SaveChanges()。
2)Asumming我们所有的entites都有一个int键,我们可以在WCF服务中公开一个看起来像这样的方法:
public void UpdtaeEntityProperty(Type i_EntityType, int i_EntityId, string i_PropertyName, string i_NewValue);
在第一种方法中,我们通过线路发送大量不需要的信息。 第二种方法只发送所需的内容,而且它适合所有的需求。另一个优点是,当用户正在更新UI中的多个字段时,我们可以更好地控制在输入值时抛出异常。
在所有EF4示例\ videos \ books中,更新属性值的过程始终涉及发送完整对象。您永远不会看到更新单个值的方法。就好像我们在客户端中缺少某种数据绑定器:将某个文本字段绑定到数据库的组件,即使是在WCF服务上也是如此。
1)这样的解决方案是否正在为EF4 / WCF的下一个实现设计?
2)我们的UpdateEntityProperty方法的解决方案是一个很好的做法吗?
答案 0 :(得分:0)
您永远不会看到更新的方法 一个单一的价值。就好像我们一样 缺少某种数据绑定器 客户端:将成为的组件 将某个文本字段绑定到DB, 即使它是通过WCF服务。
我认为您看到的大多数示例都处理了更新传递的分离实体的一般情况。这并不意味着你必须这样做,这一切都取决于你的特定情况,因为它是一种权衡与性能/定制解决方案的权衡。
如果您的实体很大并且性能对您很重要,那么只需将ID和更新后的值发送到服务器 - 此解决方案将表现更好,但不是非常通用,取决于您的实体类型的属性 - 但这可能适合你的项目。