【发布时间】:2011-04-05 13:20:05
【问题描述】:
我们有一个 n 层应用程序,其中包括一个 DB,在它之上是 EF4,然后是 WCF 服务,最后是一个 silverlight 4 客户端。
我们正在考虑更新单个实体属性的最佳方式。我们有一个 Customer 实体,它有大约 15 个属性。现在,在客户端中,用户更改了客户名称属性并希望将此更改保存到数据库。所以想到了两种方法:
1) 只需通过 WCF 服务发送整个客户实体并更新数据库。这很简单,因为在服务器的 Update 方法中,我们需要做的就是将传入的实体附加到上下文,将其 objectState 更改为已修改,然后点击 SaveChanges()。
2) 假设我们所有的实体都有一个 int 键,我们可以在 WCF 服务中公开一个方法,如下所示:
public void UpdtaeEntityProperty(Type i_EntityType, int i_EntityId, string i_PropertyName, string i_NewValue);
在第一种方法中,我们通过网络发送大量不需要的信息。 第二种方法只发送需要的内容,而且它适合所有实体。另一个好处是,当用户正在更新 UI 中的多个字段时,我们可以更好地控制在他输入值时抛出异常。
在所有 EF4 examples\videos\books 中,更新属性值的过程总是涉及发送一个完整的对象。您永远不会看到更新单个值的方法。就好像我们在客户端缺少某种数据绑定器:将某个文本字段绑定到数据库的组件,即使它通过 WCF 服务。
1) 这样的解决方案是否正在为 EF4/WCF 的下一个版本设计?
2) 我们对 UpdateEntityProperty 方法的解决方案是一个好的做法吗?
【问题讨论】:
标签: wcf entity-framework-4 n-tier-architecture