4

当我执行创建 .edmx 文件的数据库优先方法时,我对 VS.NET 2012 中的 EF5 发生的事情有点困惑。我感到困惑的原因是因为关于 EF 4.x 的信息太多了,以至于我相信很多与 EF5 相关的信息都不准确。

在 EF4 中,要使用具有数据库优先方法的 POCO,需要创建 POCO 类,并确保设置Code Generation Strategy = None。然后创建一个单独的“实体”类,该类继承自“ObjectContext”,该类具有我们的 POCO 类的知识,可与 EF 一起使用。

在带有 VS.NET 2012 的 EF5 中,当我使用数据库优先方法时,Code Generation Strategy = None is already set,并且由默认 T4 模板生成的结果类似乎已经为我创建了 POCO 类。ObjectContext结果类在or上没有继承DBContext。这是默认情况下将自动生成的实体创建为 POCO 类的方式吗?

如果答案是“是”,我实际上非常喜欢。我的主要问题是,我可以将那些 POCO 类拉到另一层吗?现在它们显示在“MyModel.tt”下,所以如果我删除它们,我想如果我更新模型,任何更改都不会反映,对吗?

谢谢!

4

1 回答 1

3

在 EF4 中,要使用具有数据库优先方法的 POCO,需要创建 POCO 类,并确保将代码生成策略设置为无。然后创建一个单独的“实体”类,该类继承自“ObjectContext”,该类具有我们的 POCO 类的知识,可与 EF 一起使用。

这是一个核心思想,但您也可以使用从 VS Gallery 下载的其他 T4 模板,它会为您生成 POCO 类。

在带有 VS.NET 2012 的 EF5 中,当我使用数据库优先方法时,已经设置了 Code Generation Strategy = None,并且由默认 T4 模板生成的结果类似乎已经为我创建了 POCO 类。生成的类对 ObjectContext 或 DBContext 没有继承。这是默认情况下将自动生成的实体创建为 POCO 类的方式吗?

是的。VS 2012 默认使用 T4 模板从模型生成 POCO 类。

我可以将那些 POCO 类拉到另一层吗?现在它们显示在“MyModel.tt”下,所以如果我删除它们,我想如果我更新模型,任何更改都不会反映,对吗?

是的,你可以有一些限制。您可以将整个 .tt 文件移动到另一个文件夹或项目,您只需更新此文件中的路径以指向 EDMX 文件的正确位置。.tt 文件是负责生成 POCO 类的 T4 模板。主要限制可能是自动更新 - 在默认配置下,模板会在保存 EDMX 文件时自动更新和保存。保存模板将触发所有 POCO 类的重新生成(= 另一个限制 - 不要修改那些自动生成的类)。当您将模板移动到另一个项目时,此自动魔法不起作用,您必须从 .tt 文件的上下文菜单中手动触发Run custom tool以强制重新生成类。

于 2013-01-04T16:31:17.587 回答