2

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

  • POCO - 普通的旧 C# 对象。它们是不继承任何东西的简单类?
  • STE - 自我跟踪实体。它们跟踪单个实体对象的更改,以便在我们执行context.SaveChanges();对实体对象的更改时注册。这不适用于收藏?

我想知道什么?

  • 如果我的上下文继承自 ObjectContext,这是否意味着我有 POCO 或 STE?同样,DbContext 是 POCO 还是 STE?
  • EF5 默认生成什么?POCO 实体还是 STE?(我首先使用模型)

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

4

2 回答 2

2

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

如果您的上下文继承自ObjectContext该类,那么您可能拥有 STE 并DbContext针对 POCO。看这里

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

模型首先,POCO 和 STE 是 3 个不同的东西。在 Entity Framework 中,您可以自由选择与您的需求兼容的最佳方法。

它可能是:

  • 代码优先
  • 模型优先
  • 数据库优先

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

STE - 自我跟踪实体,非常了解其持久性机制并被视为感知持久性。

更新: 如果您使用模型优先方法并希望将您的实体 (STE) 转换为 POCO,您可以使用EF 5.x DbContext Fluent Generator for C#

于 2013-07-04T21:36:50.920 回答
2

默认情况下,IDE 数据设计器会创建一个 .edmx 文件,该文件在 Visual Studio 的早期版本(2008 和 2010)中默认使用默认生成 STE 的 t4 模板和派生自对象上下文的上下文。在 VS 2012 中,这已更改为默认使用派生自 DbContext 的上下文生成 POCO。

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

于 2013-07-04T22:22:24.540 回答