分离POCO和Context文件

时间:2015-01-01 23:24:58

标签: .net asp.net-mvc entity-framework

所以我正在构建具有n层架构的.net mvc web应用程序。我已经有了数据库,所以我想使用EF6功能从现有数据库构建Code First类。

将来我想使用数据库迁移以及此功能再次从数据库构建代码优先类。

我真的认为这是设计数据库和POCOS的一种快捷方式。我会将数据库迁移用于简单的情况,例如添加列或更改列类型。但我真的很喜欢SQL Server Designer来构建具有大量关系的复杂多表连接表。因此,在这种情况下,我将在SQL Server中设计数据库的一部分,然后再次使用代码优先功能,再次使用我在SQL Server Designer中构建的其他功能构建所有POCO。

我遇到的问题是我希望将我的POCO放在单独的Entities类库和我的DAL库中的Context文件中。在这种情况下仍然可以使用Code First迁移吗?据我所知,在启用迁移时,您必须指定一个启用迁移的类库。

我希望我能正确描述问题。

更新 所以这就是我现在测试的内容。我将生成的POCO放在一个类库中,并在另一个类库中生成上下文。尝试在一个类库或另一个类库中启用迁移时,我收到错误项目“DAL”上未安装EntityFramework包,并且在程序集“实体”中找不到上下文类型。

所以我猜你必须将两者放在一起并在该类库中进行迁移。在DAL或POCO中使用实体类库中的迁移

进行POCO非常有趣

1 个答案:

答案 0 :(得分:2)

您根本不需要在同一个项目中拥有POCO和上下文。

我通常有这个项目:

  • 实体:包含所有POCOc的类库
  • 数据:引用实体项目的类库,并使用EF NuGet包。在这个项目中,我还定义了DbContext,并使用流畅的API来配置它。迁移和配置类也必须在此项目中。

您必须在Data项目中运行所有迁移内容。如果您收到错误,指出EF丢失,或者因为您做错了某些事情,比如缺少参数,运行带有错误项目的Packagem Manager控制台或其他类似的东西。

请参阅this SO Q & A此刻已被downvoted,但我保证其正确)。在那里,您可以获得有关如何运行迁移命令,查看帮助以及解决常见问题的信息。

注意:混淆POCO迁移和逆向工程很复杂。您应该习惯使用Fluent API创建和配置关系。你习惯它并不困难。与此同时,您可以做一些事情:使用类似于" EntityFramework Reverse POCO Generator" VS扩展(Simon Hughes)。使用此工具,您可以在数据库中进行操作,运行T4模板,查看生成的内容并在真实的DbContex"中使用该代码。保持数据库不变,这样您就不会干扰迁移...或使用-IgnoreChanges参数,但这样做更难