40

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

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

4

2 回答 2

41

自我跟踪实体 (STE) 是变更集的实现(变更集的先前 .NET 实现是DataSet)。STE 与其他实体类型(POCO、EntityObject)的区别在于,普通实体类型只有在连接到 living 时才能跟踪变化ObjectContext。一旦公共实体被分离,它就会失去任何更改跟踪能力。这正是 STE 解决的问题。即使您将 STE 从ObjectContext.

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

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

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

于 2011-02-23T14:19:38.810 回答
15

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

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

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

于 2011-02-23T14:17:14.123 回答