【问题标题】:MySQL 5.7: System.Data.StrongTypingException when adding or updating an EDMX modelMySQL 5.7:添加或更新 EDMX 模型时出现 System.Data.StrongTypingException
【发布时间】:2016-02-08 13:35:39
【问题描述】:

我尝试让实体框架(5 或 6)与 MySQL 5.7(数据库优先)一起使用,但为(测试)数据库添加实体数据模型会导致错误“生成模型时发生意外异常。StrongTypingException : 表 TableDetails 中列 'IsPrimaryKey' 的值为 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 5.6 与 EF 5 一起工作。我可以添加、更新和使用 EDMX 模型。
  • 带有 EF 6 的 MySQL 5.6 可以部分工作。添加 EDMX 模型时,向导会崩溃。我可以为 EF 5 添加一个模型,将 EF 更新为 6,安装 Nuget 包“MySql.Data.Entity”并将 EDMX 模型更新为 EF 6。该模型在运行应用程序时工作。但是尝试从数据库中更新模型会导致异常。
  • 在像上面那样创建 EF 6 模型并在装有 MySQL 5.7 的机器上使用它后,模型可以工作,但更新(再次)会导致 StrongTypingException。李>

我希望这个问题可以通过一些 MySQL 配置来解决。我已经在装有 MySQL 5.7 的机器上尝试了show_compatibility_56=ON。没有帮助。

【问题讨论】:

  • 你解决过自己的问题吗???我有完全相同的问题。如果您解决了问题,我很乐意为您的问题和答案 +1。
  • 不,我没有解决。我使用 MySQL 5.6 和 EF 5 解决了问题。
  • :( ...哦,好吧。本来很好。我能够通过代码优先映射使 EF6 和 MySQL 一起工作,这并不像听起来那么痛苦...越过我的我没有碰到任何其他障碍的手指。

标签: mysql entity-framework entity-framework-6 mysql-5.7


【解决方案1】:

第三次更新:执行以下查询:您需要关闭全局和非全局开关。我已经证明这些可以在 VS2015 + EF6.1.3 + MySql 5.7.12 上工作

use <<database name>>;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

设置这些值后,您需要重新启动 Visual Studio,然后再尝试创建 EDMX。

如果您没有看到结果,请检查两个变量是否正确设置:

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

【讨论】:

    【解决方案2】:

    不是问题的确切答案,而是一种似乎有效的解决方法。

    我在尝试使 ADO.NET 映射工作时遇到了类似的问题。但是,我能够手动创建我的 POCO 实体并手动创建 DbSet&lt;&gt; 代码,这使我能够成功查询我的数据库。这里有一个快速的设置方法,真的很轻松。

    http://lvasquez.github.io/2014/11/18/EntityFramework-MySql/

    然后,我使用本指南来学习如何使用其他属性来进一步映射我的数据:

    https://msdn.microsoft.com/en-us/data/jj591583.aspx#TableColumn

    在对几个实体执行上述操作后,我注意到当我运行测试以查询数据并运行调试时...抛出异常,然后被与丢失的 __migrations 相关的 MySQL 代码捕获.我不太确定如何解决这个问题,但我也不希望 EF 进行自动迁移。因此,根据网络上的其他一些帮助,我将 EF 配置为禁用自动迁移并且不进行数据库初始化:

    为了关闭自动迁移,我将这个类与我的 DbContext 实现一起放入项目中:

    internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }
    }
    

    然后,要禁用数据库初始化(这实际上是引发错误的原因,我将它放在我的 app.config 中(在 &lt;entityFramework&gt; 配置标签内):

    <contexts>
      <context type="My.Model.MyDbContext, My.Model" disableDatabaseInitialization="true"/>
    </contexts>
    

    我不太确定我是否以“最好的方式”做了所有事情,但这排除了我的例外情况。

    【讨论】:

      【解决方案3】:

      MySql 不支持 EF-5 仅支持 MS SQL

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-01-12
      • 2012-02-28
      • 2016-01-08
      相关资源
      最近更新 更多