2011-07-09 72 views
0

据我了解,代理POCO对象可以跟踪变化只被附加到ObjectContext的。相反,STE轨道的变化甚至被分离。我很好奇为什么不支持内部实施STE行为的POCO代理?代理POCO像自跟踪实体

回答

1

把这只作为我的个人意见。

有没有“自我跟踪代理”,因为当前的实现它会也没有任何意义。为什么:

  • 自我跟踪实体开发,以支持通过Web服务变更集场景中的实体能够跟踪在客户端的变化,客户端将通过这些修改到服务和实体将更改应用到一个新的上下文的实例。
  • 为了使这项工作的客户和服务必须共享自我跟踪实体的实施。

是应该国营的使用。在任何其他情况下,他们没有太多的感觉

  • 在的WinForms/WPF /服务应用程序直接访问EF你不需要他们,这通常是一个糟糕的场景中使用它们,因为你可以使用连接实体直。
  • 在Web应用程序中,您不需要它们,因为它需要将其存储在页面(与视图状态相同)或会话/缓存中。第一种情况是设计方法,这种方法已经死了很多年了,你应该不使用它,而应该尽可能避免使用第二种情况。

那么你在哪里看到“自我跟踪代理”的用法?你想用它们代替STE吗?为什么?更重要的是如何? STE实现的主要优点是它们是可序列化的,而动态创建的代理不是!如果您检查通过Web服务(WCF)的序列化如何工作,您将看到所有通过服务传递的可序列化类型必须知道服务何时启动。否则,只会显示基本的未被讨论的内容。

+0

我甚至会在桌面应用程序和Web中使用它们。有两点我不喜欢使用附属实体。 1.改变保存隐含性。如果我修改了几个实体,所有这些实体都将被保存。但是如果我只想保存其中的一个呢?在STE中,我可以明确告诉更新一个实体。 2.遇到异常时,ObjectContext可能处于不一致状态。当我打电话给SaveChanges时,这个不一致将会发送到数据库。 STE方法并非如此。 – SiberianGuy

+0

在这种情况下,您根本没有使用EF--假设您没有使用上下文作为工作单元,否则您将无法找到您只需要保存修改子集的场景,因为您正在寻找黑客。 –

+0

我的错。我不想说我的主要目标是保存一部分修改。当我调用SaveChanges时,任何实体属性修改都会进入数据库,这让我感到不舒服。我宁愿显式标记实体以更新调用_myRepository.Update(entity) – SiberianGuy