分离 POCO 和上下文文件
Separating POCO and Context file
所以我正在构建具有 n 层架构的 .net mvc web 应用程序。我已经有数据库,所以我想使用 EF6 功能从现有数据库构建 Code First classes。
将来我想使用数据库迁移以及此功能来首先从数据库构建代码 classes。
我真的认为这是设计数据库和 POCOS 的一种又好又快的方法。对于添加列或更改列类型等简单情况,我会使用数据库迁移。但我真的很喜欢 SQL Server Designer 用于构建具有大量关系的复杂多连接表。因此,在那种情况下,我会在 SQL 服务器中设计部分数据库,然后再次使用代码优先功能再次构建所有 POCO,并使用我在 SQL Server Designer 中构建的附加功能。
我遇到的问题是我希望将我的 POCO 放在单独的实体 class 库中,并将上下文文件放在我的 DAL 库中。在那种情况下是否仍然可以使用 Code First 迁移?据我了解,在启用迁移时,您必须指定启用迁移的 class 库。
希望我描述的问题正确。
更新
所以这就是我现在测试的内容。我将生成的 POCO 放在一个 class 库中,将生成的上下文放在另一个库中。尝试在一个 class 库或另一个库中启用迁移时出现错误 The EntityFramework package is not installed on project 'DAL' and No context type was found in the assembly 'Entities' .
所以我猜你必须同时拥有两者并在 class 库中进行迁移。在 DAL 中使用 POCO 或在实体中使用迁移的 POCO 很有趣 class library
您根本不需要在同一个项目中拥有 POCO 和上下文。
我通常有这个项目:
- 实体:一个包含所有 POCOc
的 class 库
- 数据:一个 class 库,它引用实体项目,并使用 EF NuGet 包。在这个项目中我也定义了
DbContext
,并使用fluent API来配置它。并且迁移和配置 classes 也必须在此项目中。
您必须 运行 Data
项目中的所有迁移内容。如果您收到错误消息,指出 EF 丢失,或任何其他因为您做错了什么,例如缺少参数,运行使用 Packagem 管理器控制台选择了错误的项目或类似的东西。
请参阅this SO Q & A(目前被否决,但我保证它是正确的)。那里有关于如何 运行 迁移命令、查看它们的帮助以及解决常见问题的信息。
注意:混淆 POCO 迁移和逆向工程很复杂。您应该习惯于使用 Fluent API 创建和配置关系。习惯了就不难了。与此同时,您可以做一些事情:使用类似 "EntityFramework Reverse POCO Generator" VS Extension(Simon Hughes)之类的东西。有了这个工具,您就可以在数据库中创建一个 cahnge,运行 T4 模板,查看生成的内容并在 "real DbContex" 中使用该代码。保持数据库原样,这样您就不会干扰迁移...或使用 -IgnoreChanges
参数,但这更难做到
所以我正在构建具有 n 层架构的 .net mvc web 应用程序。我已经有数据库,所以我想使用 EF6 功能从现有数据库构建 Code First classes。
将来我想使用数据库迁移以及此功能来首先从数据库构建代码 classes。
我真的认为这是设计数据库和 POCOS 的一种又好又快的方法。对于添加列或更改列类型等简单情况,我会使用数据库迁移。但我真的很喜欢 SQL Server Designer 用于构建具有大量关系的复杂多连接表。因此,在那种情况下,我会在 SQL 服务器中设计部分数据库,然后再次使用代码优先功能再次构建所有 POCO,并使用我在 SQL Server Designer 中构建的附加功能。
我遇到的问题是我希望将我的 POCO 放在单独的实体 class 库中,并将上下文文件放在我的 DAL 库中。在那种情况下是否仍然可以使用 Code First 迁移?据我了解,在启用迁移时,您必须指定启用迁移的 class 库。
希望我描述的问题正确。
更新 所以这就是我现在测试的内容。我将生成的 POCO 放在一个 class 库中,将生成的上下文放在另一个库中。尝试在一个 class 库或另一个库中启用迁移时出现错误 The EntityFramework package is not installed on project 'DAL' and No context type was found in the assembly 'Entities' .
所以我猜你必须同时拥有两者并在 class 库中进行迁移。在 DAL 中使用 POCO 或在实体中使用迁移的 POCO 很有趣 class library
您根本不需要在同一个项目中拥有 POCO 和上下文。
我通常有这个项目:
- 实体:一个包含所有 POCOc 的 class 库
- 数据:一个 class 库,它引用实体项目,并使用 EF NuGet 包。在这个项目中我也定义了
DbContext
,并使用fluent API来配置它。并且迁移和配置 classes 也必须在此项目中。
您必须 运行 Data
项目中的所有迁移内容。如果您收到错误消息,指出 EF 丢失,或任何其他因为您做错了什么,例如缺少参数,运行使用 Packagem 管理器控制台选择了错误的项目或类似的东西。
请参阅this SO Q & A(目前被否决,但我保证它是正确的)。那里有关于如何 运行 迁移命令、查看它们的帮助以及解决常见问题的信息。
注意:混淆 POCO 迁移和逆向工程很复杂。您应该习惯于使用 Fluent API 创建和配置关系。习惯了就不难了。与此同时,您可以做一些事情:使用类似 "EntityFramework Reverse POCO Generator" VS Extension(Simon Hughes)之类的东西。有了这个工具,您就可以在数据库中创建一个 cahnge,运行 T4 模板,查看生成的内容并在 "real DbContex" 中使用该代码。保持数据库原样,这样您就不会干扰迁移...或使用 -IgnoreChanges
参数,但这更难做到