如何转换 Entity Framework 6 来为我的模型生成 FluentAPI 定义,而不是数据注释? (我在 VS2015 中使用 MySQL)
Posted
技术标签:
【中文标题】如何转换 Entity Framework 6 来为我的模型生成 FluentAPI 定义,而不是数据注释? (我在 VS2015 中使用 MySQL)【英文标题】:How can I convert Entity Framework 6 to generate FluentAPI definitions for my model, instead of data annotations? (I am using MySQL with VS2015) 【发布时间】:2017-01-12 22:42:23 【问题描述】:出于几个原因,我想使用 FluentAPI 来覆盖生成的字段定义的 EF 约定。默认情况下,EF6 为所有生成的类创建数据注释。
有没有一种自动化的方法可以将这些注解转换为 FluentAPI,或者让 EF 来创建 FluentAPI 定义而不是使用数据注解?
【问题讨论】:
你试过EF反向poco模板吗? 是的,EF Power Tools 将为您创建流畅的 api(以及 POCO 类)。 thedatafarm.com/data-access/… 删除感谢通知 @Steve 谢谢,这正是我所需要的。 【参考方案1】:我终于解决了这个问题并开始工作。 (我在 mysql 5.1.76 和 VS2015 更新 3 中使用 EF6)。
我按照以下步骤安装了修改后的 powertools VSIX 以与 VS2015 一起运行:http://thedatafarm.com/data-access/installing-ef-power-tools-into-vs2015/(感谢@Steve)。但是,选择“逆向工程师代码优先”选项失败,原因如下:
在 C:\Windows\Microsoft.NET\Framework\vx.x.xx\config\machine.config 中找到的对 MySQL 版本的任何引用都需要与您的 mySQL.Data.Entity.EF6 的版本相匹配项目参考。 (您的文本编辑器需要在管理员模式下运行才能保存文件)。
错误: MySQL - Entity : The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull - 按照该帖子接受的答案解决了这个问题。
错误:Visual Studio 2015 Update 2 breaks EF reverse code engineer vsix - 已通过将目标框架重置为 4.5.1 解决此问题
现在我可以选择“逆向工程师代码优先”选项,它运行时不会出错,并且我的模型已成功创建,正如我想要的那样使用 FluentAPI 映射。
【讨论】:
作为对此的跟进,Entity Framework Core 默认使用 FluentAPI 映射,并且有一些其他不错的新功能不一定会移植到 EF6,因此,这可能是一个很好的方法如果你有选择,那就去吧。以上是关于如何转换 Entity Framework 6 来为我的模型生成 FluentAPI 定义,而不是数据注释? (我在 VS2015 中使用 MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
在 Entity Framework 6.1(非核心)中,如何使用 IndexAttribute 来定义聚集索引?
Entity Framework 6 Code first:如何使用“循环”关系和存储生成的列来播种数据?
如何使用 Entity Framework 6 Code First 设置默认值约束?
如何在 Entity Framework 6 中使用 DbDataReader 获取表名?