我尝试让实体框架(5或6)使用MySQL 5.7(数据库优先),但为(测试)数据库添加实体数据模型会导致错误"生成时出现意外异常模型。 StrongTypingException:列' IsPrimaryKey'的值在表TableDetails中是DBNull。"。该表有一个主键:
CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Value` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
在我试图找到这个问题的根源时,我尝试了一些组合:
我希望通过一些MySQL配置以某种方式解决这个问题。我已经在使用MySQL 5.7的机器上尝试了show_compatibility_56=ON
。没有帮助。
答案 0 :(得分:4)
更新第3次:执行以下查询:您需要将全局和非全局开关关闭。我已经证明这些适用于VS2015 + EF6.1.3 + MySql 5.7.12
use <<database name>>;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';
设置这些值后,您需要在尝试创建EDMX之前重新启动Visual Studio。
如果您没有看到结果,请检查两个变量是否通过以下方式正确设置:
select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;
两个查询都应该在变量值字符串的末尾找到“derived_merge = off”的结果。
注意:如果重新启动服务器,则需要再次设置这些值,因为derived_merge optimizer_switch默认为ON。
参考:关于EF6.1.3和MySql 5.7的这个BUG已经有了积极的讨论 https://bugs.mysql.com/bug.php?id=79163
答案 1 :(得分:0)
不是问题的确切答案,但似乎有效的解决办法。
我在试图让ADO.NET映射工作时遇到了类似的问题。但是,我能够手动创建我的POCO实体并手动创建DbSet<>
代码,这使我能够成功查询我的数据库。这是一个快速的设置方法,这真的很轻松。
http://lvasquez.github.io/2014/11/18/EntityFramework-MySql/
然后,我使用本指南了解如何进一步映射数据的其他属性:
https://msdn.microsoft.com/en-us/data/jj591583.aspx#TableColumn
在对几个实体执行上述操作之后,我注意到当我运行我的测试来查询数据并运行调试时...异常被抛出然后被MySQL代码捕获而与缺少的__migrations有关。我不确定如何解决这个问题,但我也不希望EF进行自动迁移。因此,在Web上的其他一些帮助之后,我将EF配置为禁用自动迁移而不进行数据库初始化:
要关闭自动迁移,我将此类放在项目中,并实现了DbContext:
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
然后,要禁用数据库初始化(这实际上是抛出错误,我把它放在我的app.config中(在<entityFramework>
配置标记内):
<contexts>
<context type="My.Model.MyDbContext, My.Model" disableDatabaseInitialization="true"/>
</contexts>
我不太确定我做的所有事情都是“最好的方式”,但是我摆脱了例外。
答案 2 :(得分:-3)
MySql不支持MS-SQL上的EF-5支持