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

par*_*agy 5 poco entity-framework-4 self-tracking-entities

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

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

  1. 由于没有跟踪,Context如何将更改保留到DB?
  2. Context是否为POCO动态生成跟踪信息?

我正在使用的示例代码,

        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);
Run Code Online (Sandbox Code Playgroud)

Cra*_*ntz 6

自我跟踪实体不是POCO.相反,他们非常注重持久性.EntityObject甚至比实体还要多.使它们与众不同的是,即使它们没有附加到变化,也可以跟踪变化ObjectContext.

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

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