实体框架4.0是否跟踪普通旧C#对象的更改?
如果是这样,我的班级应该做一些特别的事情(在更改属性值时实现接口/引发事件吗?)
另外,我如何获得POCO的状态(修改/未更改等)?有没有办法知道属性的“旧”值?
答案 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)
到目前为止,创建满足这些要求的类的最简单方法是使用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完成的示例。