MySQL-Entity:表‘TableDetails’中列‘IsPrimaryKey’的值为DBNull

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (39)

我在用VisualStudio 2013带着实体框架5和MySQLServer 5.7.9...

尝试从数据库创建模型时(或“从数据库中更新模型”)出现以下消息:

‘System.Data.StrongTypingException:表’TableDetails‘中列’IsPrimaryKey‘的值是DBNull。-->System.InvalidCastException:指定的强制转换无效。

我知道这个问题以前有人问过,但我没有找到任何解决办法。此外,我没有选择降级到mysql 5.6。

即使对于一个简单的表,问题也会发生。

样本表

CREATE TABLE new_table
(
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(45) NOT NULL,
  PRIMARY KEY (id)
) 
ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

如果表仅由主键组成,则模型将按其应有的方式创建。

如果我将这两个字段都设置为主键,则将创建模型,而不会出现任何错误。

有人知道这件事吗?

完全错误堆栈:

..._..._...1 columns, IList1错误,列表1& keyColumns, List1及不包括柱,列表1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList...1 tableDetailsRows, EntityRegister entityRegister, IList...1 tableDetailsRowsForTables, IEnumerable...1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List...。从数据库加载元数据花费了00:00:00.5856317。

提问于
用户回答回答于

实体框架(6.1.3版)和MySQL服务器(>=5.7.6)

解决这个问题的一个方法是,

1. Open Services (services.msc) and restart MySQL57 service.
2. Execute the following commands in MySQL.
   use <<database name>>;
   set global optimizer_switch='derived_merge=OFF';
3. Update the .edmx.
用户回答回答于

实体框架(6.8.8版)和MySQL服务器(5.7.17),VS2015 社区版

按照上面两位的办法处理完错误依旧存在,但是MySQL5.7.4_m14没问题

用户回答回答于

这是一个已知的错误:http://bugs.mysql.com/bug.php?id=79163

在MySQL控制台上运行命令:

set global optimizer_switch='derived_merge=off'

set @@optimizer_switch='derived_merge=OFF'

(这个对我有用)

使用以下命令验证更改是否有效:

SELECT @@optimizer_switch\G

扫码关注云+社区