需要自我跟踪实体和POCO解释

时间:2013-07-04 20:55:28

标签: c# .net entity-framework

我认为我理解(​​如果我错了,请纠正我)

  • POCO - 普通的旧C#对象。它们是不接受任何东西的简单类吗?
  • STE - 自我追踪实体。它们跟踪单个实体对象的更改,以便在我们执行context.SaveChanges();时注册实体对象的更改。这对集合不起作用吗?

我想知道什么?

  • 如果我的上下文继承自ObjectContext,那是否意味着我有POCO或STE?同样,是DbContext POCO还是STE?
  • 默认情况下EF5会生成什么? POCO实体还是STE? (我正在使用Model First)

还有人可以给我一些代表这两种实体的代码示例吗?

2 个答案:

答案 0 :(得分:2)

  

如果我的上下文继承自ObjectContext,那是否意味着我有POCO   还是STE?同样,是DbContext POCO还是STE?

如果你的上下文继承自ObjectContext类,那么你可能有STE和DbContext对抗POCO。看here

  

默认情况下EF5会生成什么(模型优先)? POCO实体还是STE?

模型首先,POCO和STE是3个不同的事物。在实体框架中,您可以自由选择符合您需求的最佳方法。

可能是:

  • 代码优先
  • 模型 - 第一
  • 数据库-首先

POCO - 普通的旧CLR对象是“干净的”类,没有穿插数据库访问功能等,被视为持久性无知实体。

STE - 自我跟踪实体,他们充分了解其持久性机制并被视为知晓持久性。

<强>更新 如果您正在使用Model-First方法并希望将实体(STE)转换为POCO,则可以使用EF 5.x DbContext Fluent Generator for C#

答案 1 :(得分:2)

默认情况下,IDE数据设计器会创建一个.edmx文件,默认情况下,在早期版本的Visual Studio(2008和2010)中使用t4模板,默认情况下生成STE,以及派生自Object Context的上下文。在VS 2012中,默认情况下将其更改为生成POCO,其中包含源自DbContext的上下文。

您可以使用NuGet下载新的代码生成器来更改此行为。