所以我正在构建具有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非常有趣答案 0 :(得分:2)
您根本不需要在同一个项目中拥有POCO和上下文。
我通常有这个项目:
DbContext
,并使用流畅的API来配置它。迁移和配置类也必须在此项目中。您必须在Data
项目中运行所有迁移内容。如果您收到错误,指出EF丢失,或者因为您做错了某些事情,比如缺少参数,运行带有错误项目的Packagem Manager控制台或其他类似的东西。
请参阅this SO Q & A(此刻已被downvoted,但我保证其正确)。在那里,您可以获得有关如何运行迁移命令,查看帮助以及解决常见问题的信息。
注意:混淆POCO迁移和逆向工程很复杂。您应该习惯使用Fluent API创建和配置关系。你习惯它并不困难。与此同时,您可以做一些事情:使用类似于" EntityFramework Reverse POCO Generator" VS扩展(Simon Hughes)。使用此工具,您可以在数据库中进行操作,运行T4模板,查看生成的内容并在真实的DbContex"中使用该代码。保持数据库不变,这样您就不会干扰迁移...或使用-IgnoreChanges
参数,但这样做更难