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

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

自我跟踪实体的目标是什么?为什么要使用它们?

自我跟踪实体(STE)是变更集的实现(以前的变更集的.NET实现是DataSet )。 STE和其他实体types(POCO,EntityObject)之间的区别在于通用实体types只有在连接到生活的ObjectContext时才能跟踪更改。 一旦共同实体被分离,它就会失去任何变更追踪能力。 这正是STE解决的问题。 即使您将它从ObjectContext分离,STE也能够跟踪更改。

STE的常见用法是通过Web服务在.NET和.NET之间断开连接的情况。 首先请求Web服务将创build并返回STE(实体在序列化时被分离,而ObjectContext只为了单个调用而活动)。 客户将在STE中进行更改,并在另一个Web服务调用中将其传回。 服务将能够处理更改,因为它将提供STE内部更改跟踪。

处理这种情况没有变化跟踪是可能的,但它是复杂得多,尤其是当你使用整个对象图而不是单一的实体 – 你必须手动合并从客户端接收到数据库中的当前状态的变化。

请注意, STE不适用于可互操作的解决scheme,因为它们的function基于在服务器和客户端之间共享STE代码。

主要目的是协助N层开发。 由于它们是自我跟踪的,所以可以通过比如说一个WCF服务将它们序列化,然后将它们反序列化,然后它们仍然知道哪些更改已经完成,并且正在等待数据库。

自我跟踪实体知道如何进行自己的更改跟踪,不pipe这些更改是在哪一层进行的。 作为一种架构,自我跟踪实体介于DTO和DataSet之间,并包含每个实例的一些好处。

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