实体框架是否跟踪POCO的变化

时间:2009-12-19 00:20:50

标签: .net entity-framework

实体框架4.0是否跟踪普通旧C#对象的更改?

如果是这样,我的班级应该做一些特别的事情(在更改属性值时实现接口/引发事件吗?)

另外,我如何获得POCO的状态(修改/未更改等)?有没有办法知道属性的“旧”值?

4 个答案:

答案 0 :(得分:3)

我通过快速谷歌搜索找到了POCO in the Entity Framework: Part 1 - The Experience。请参阅Part 3 – Change Tracking with POCO

  

有两种类型的更改跟踪   POCO的可能性:快照   基于变更跟踪和通知   基于代理的变更跟踪。在   这篇文章,我想深入研究   两种选择都进一步覆盖   的优点和缺点   两者,以及...的含义   使用任何一种方法。

答案 1 :(得分:1)

问题已经改变,询问即将推出的.net 4.0对POCO的支持。下面的答案是关于现有的.net 3.5支持,正如最初的要求。有关.net 4.0 EF POCO支持的信息,请参阅其他答案。


没有。当前版本的实体框架不支持POCO。

  

为了被EF消费,   实体类必须:

     
      
  • 从EntityObject类派生或实现至少一个强制性IPOCO   interface:IEntityWithChangeTracker。   如果实体参与   它还必须实现的关系   IEntityWithRelationships界面。   实现这些接口不是   很难,但导致实体对象   依赖于EF组装,   这有时是不可取的

  •   
  • 提供要定义的程序集,类和属性级属性   从CLR空间映射到模型空间   (我们称之为O-C映射属性)

  •   
  • 使用Entity-Framework提供的关系类:   的EntityReference,   EntityCollection和   RelationshipManager而不是CLR   集合(List,ICollection)

  •   

source

到目前为止,创建满足这些要求的类的最简单方法是使用Visual Studio中的EF设计器来创建EDMX文件。该文件的一部分包含CSDL,它定义了数据的概念模型,换句话说 - 对象。 EDMX文件还定义了SSDL(存储/数据库)和MSL(SSDL和CSDL之间的映射)。正是这个CSDL将用于生成将与EF一起使用的类。

POCO支持即将在.net 4.0中发布。

答案 2 :(得分:1)

如果您使用动态生成的代理(如果您的类符合要求,这是POCO的默认行为),将跟踪您实体的更改。

有关详细信息,请参阅此文章:Tracking Changes in Persistence-Ignorant Objects

答案 3 :(得分:0)

我不知道你是如何在EF中使用POCO的(没有用问题发布的代码),但是如果你使用EF创建的实体,你可以跟踪所做的更改。这MSDN article解释了这一点。您还可以阅读此blog post以获取更多详细信息。如果这些对您没有帮助,您是否可以使用示例代码更新您的问题,该示例代码说明您如何使用EF以及如何使用POCO。试图通过模拟代码示例展示您希望通过POCO完成的示例。