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