自我追踪实体的目的是什么?

时间:2011-02-23 14:08:53

标签: c# .net entity-framework self-tracking-entities

我一直在阅读.net中的自跟踪实体以及如何从* .edmx文件生成它们。我正在努力理解的是生成这些实体的原因是什么让你了解基本的EF实体?另外,有些人提到了自我跟踪实体和Silverlight,但为什么要使用这些实体而不是客户端或RIA服务生成的共享类?

自我跟踪实体有什么意义?为什么要使用它们?

2 个答案:

答案 0 :(得分:41)

自跟踪实体(STE)是变更集的实现(变更集的先前.NET实现是DataSet)。 STE与其他实体类型(POCO,EntityObject)之间的区别在于,常见实体类型只有在连接到生活ObjectContext时才能跟踪更改。一旦公共实体被分离,它就会失去任何变更跟踪能力。这正是STE所解决的。即使您将更改从ObjectContext分离,STE也能够跟踪更改。

STE的常见用法是在断开连接的场景中,例如通过Web服务进行.NET到.NET通信。对Web服务的第一个请求将创建并返回STE(序列化时实体已分离,而ObjectContext仅用于单个调用)。客户端将在STE中进行更改,并在另一个Web服务调用中将其传回。服务将能够处理变更,因为它将具有STE内部变更跟踪功能。

可以在没有更改跟踪的情况下处理此方案,但它更复杂,尤其是当您使用整个对象图而不是单个实体时 - 您必须manually merge从客户端收到的更改到数据库中的当前状态。

请注意STEs are not for interoperable解决方案,因为它们的功能基于在服务器和客户端之间共享STE代码。

答案 1 :(得分:14)

主要目的是帮助N层发展。由于它们是自我跟踪的,您可以将它们序列化,例如,WCF服务,然后反序列化它们,它们仍然会知道已经进行了哪些更改,并且正在等待数据库。

  

自我追踪实体知道该怎么做   不管他们自己的变化跟踪   这些更改的层次   上。作为一种架构,自我跟踪   实体属于DTO和   DataSet和包括一些   每个人的好处。

http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx