使用Entity Framework模型在项目的不同项目中生成POCO类

.net code-generation entity-framework poco repository-pattern

我正在尝试使用VS2010使用EF4的存储库模式。

为此,我通过右键单击实体模型设计器并单击添加代码生成项来使用POCO代码生成。然后我选择POCO模板并获取我的课程。

我希望能够做的是将我的解决方案结构化为Entity(POCO)类的单独项目以及实体模型和存储库代码的另一个项目。

这意味着我的MVC项目可以将POCO类用于强类型视图等,而不必知道存储库或必须引用它。

要将它们全部插入,我将有另一个带接口的独立项目并使用IoC。

听起来不错我只是不知道如何将类生成到自己的项目中!我可以复制它们,然后更改它们的名称空间,但我想在每次更改数据库中的模式并希望更新我的模型时避免手动工作。

谢谢

一般承认的答案

实际上,EF 4.0中的T4模板设计时考虑到了这种情况:)

有2个模板:

  • 一个为实体本身(即ModelName.tt)
  • 一个用于ObjectContext(即ModelName.Context.tt)

您应该将ModelName.tt文件放在POCO项目中,只需将模板更改为指向持久性感知项目中的EDMX文件即可。

听起来很奇怪我知道:现在有依赖,但它是在T4代时,而不是在编译时!这应该没问题?因为由此产生的POCO组件仍然是完全持久的无知。

请参阅以下步骤5和6: http//blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx了解更多信息。

希望这可以帮助

亚历克斯


热门答案

@缺口,

  1. 要强制重新生成POCO实体,只需右键单击主.tt文件并选择“运行自定义工具”。这将强制它使用对.edmx模型的更新更改来重新生成POCO类。
  2. 您是否存在任何问题并右键单击模型并选择“从模型生成数据库...”即使您不一定生成数据库?这很可能会摆脱你的'错误11007 ......'。
  3. 我认为它等同于“Code Behind”。我不知道更多。

另外还要注意Alex给出的链接。一旦我将主.tt文件移动到另一个项目,从“.Context.tt”文件生成的文件将无法编译,因为它缺少对位于不同命名空间中的POCO文件的引用(因为我想要我的ObjectContext与我的POCO文件位于不同的域中)。我不得不修改“.Context.tt”文件以using Poco.Namespace (其中Poco.Namespace是生成POCO文件的命名空间的名称)。然后这允许我的项目编译。

乔尔



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因