【问题标题】:Entity Framework 4 - Updating a single entity property in N-Tier dilemma实体框架 4 - 在 N 层困境中更新单个实体属性
【发布时间】: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


    【解决方案1】:

    您永远不会看到更新的方法 单个值。就好像我们是 缺少某种数据绑定器 客户端:一个组件,它将 将某个文本字段绑定到数据库, 即使是通过 WCF 服务。

    我认为您看到的大多数示例都处理了更新传递的分离实体的一般情况。这并不意味着您必须这样做,这完全取决于您的特定场景,因为它是通用性与性能/自定义解决方案的权衡。

    如果您的实体很大并且性能对您很重要,请务必将 ID 和更新后的值发送到服务器 - 此解决方案的性能会更好,但不是很通用,并且取决于您的实体类型的属性- 但这对您的项目来说可能没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 2011-10-09
      • 1970-01-01
      • 2023-04-05
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多