EF4:POCO,自我追踪实体,POCO代理之间的差异

时间:2010-10-19 09:07:42

标签: entity-framework-4 poco self-tracking-entities

有人能指出POCO,自我跟踪实体,POCO代理之间的区别吗?

实际上,我正在使用Entity Framework 4.0和POCO(Repository Pattern),每当我在POCO中进行一些更改并调用ObjectContext.Savechanges时,它就会反映到DB。 我的问题是,

  1. 由于未跟踪,因此Context如何将更改保留在DB中?
  2. 上下文是否为POCO动态生成跟踪信息?
  3. 我正在使用的示例代码,

            IEFRepository<Category> catRepository = new EFRepository<Category>();
            Category c = catRepository.FindOne<Category>(x => x.Name == "Paper");
    
            c.Name = "Paper";
            catRepository.SaveChanges(System.Data.Objects.SaveOptions.None);
    

1 个答案:

答案 0 :(得分:6)

自我跟踪实体不是POCO。相反,他们非常注重持久性。甚至超过EntityObject个实体。使它们与众不同的是,即使它们未附加到ObjectContext,也可以跟踪更改。

正如你所说,“纯粹的”POCO使变更跟踪变得困难。实际上,你唯一能做的就是比较对象的快照。对象上下文有一个DetectChanges方法。

使用伪POCO代理,你真正拥有的是一种在编译时看起来(几乎)像POCO并且在运行时看起来像非POCO的类型。我说“差不多”,因为在运行时你会得到一个实例,它是编译时类型的子类型。因此,您要跟踪更改的任何属性都必须是非私有和虚拟的。类似的限制适用于延迟加载。您可以在ADO.NET团队博客上的this series of articles中了解更多相关信息。