自我跟踪实体的目的是啥?
Posted
技术标签:
【中文标题】自我跟踪实体的目的是啥?【英文标题】:What is the purpose of self tracking entities?自我跟踪实体的目的是什么? 【发布时间】:2011-07-02 19:04:35 【问题描述】:我一直在阅读 .net 中的自我跟踪实体以及如何从 *.edmx 文件生成它们。我很难理解的是,生成这些实体会给您带来什么超越基本的 EF 实体?此外,有些人提到了自我跟踪实体和 Silverlight,但您为什么要使用这些而不是客户端或 RIA 服务生成的共享类?
自我跟踪实体的意义何在?为什么要使用它们?
【问题讨论】:
【参考方案1】:自我跟踪实体 (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 代码。
【讨论】:
好的 - 那么关于向 silverlight 客户端提供数据的 RIA 服务,什么时候需要同时使用 RIA 和 STE? @Calanus:也许这会回答您的问题:forums.silverlight.net/forums/p/157143/351463.aspx 否则您应该使用所有相关标签提出单独的问题,因为 WCF RIA 服务是非常具体的主题。我从未使用过 RIA 服务。 所以,总而言之,STE 真的是一种具有变化跟踪能力的数据传输对象吗? @Calanus:不。STE 不是数据传输对象。数据传输对象仅用于将对象从一层传递到另一层,但 STE 是由 EF 直接持久化到 DB 的实体。【参考方案2】:主要目的是帮助 N 层开发。由于它们是自我跟踪的,因此您可以通过 WCF 服务对它们进行序列化,然后将它们反序列化,它们仍然会知道已经进行了哪些更改,并且正在等待数据库。
自我跟踪实体知道该怎么做 他们自己的变更跟踪,不管 这些更改发生在哪一层 在。作为一种架构,自我跟踪 实体介于 DTO 和 数据集并包括一些 各有好处。
http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx
【讨论】:
以上是关于自我跟踪实体的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章