5

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

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

  1. 由于未跟踪,上下文如何将更改持久保存到数据库?
  2. 上下文是否为 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);
4

1 回答 1

6

自我跟踪实体不是 POCO。相反,他们非常具有持久性意识。甚至比EntityObject实体更重要。它们的独特之处在于,即使它们没有附加到ObjectContext.

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

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

于 2010-10-19T14:28:06.590 回答