MySQL - 实体:表'TableDetails'中列'IsPrimaryKey'的值是DBNull

mag*_*isi 53 c# mysql entity-framework

我正在使用Visual Studio 2013与Entity Framework 5和M ySQL Server 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;
Run Code Online (Sandbox Code Playgroud)

如果表仅包含主键,则表示正在创建模型.

编辑: 如果我使两个字段PRIMARY键正在创建模型没有任何错误.

有没有人对此有任何想法?

亲切的问候.

完整的错误堆栈:

由于以下异常,无法生成模型:'System.Data.StrongTypingException:表'TableDetails'中列'IsPrimaryKey'的值为DBNull.---> System.InvalidCastException:指定的强制转换无效.在Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey()---内部异常堆栈跟踪结束---在Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey ()at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties(IList 1 columns, IList1 errors,List 1& keyColumns, List1&excludedColumns,List 1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList1 columns,Boolean&needsDefiningQuery)at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets (IEnumerable 1 tableDetailsRows, EntityRegister entityRegister, IList1 entitySetsForReadOnlyEntityTypes,DbObjectType objectType)在Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build(StoreSchemaDetails)的Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable 1 tableDetailsRowsForTables, IEnumerable1 tableDetailsRowsForViews,EntityRegister entityRegister)中. storeSchemaDetails)在Microsoft.Data.Entity.Design.VisualStudio.ModelWizar Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel中的Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel(List 1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List1 errors)中的d.Engine.ModelGenerator.CreateStoreModel()(EdmxHelper edmxHelper)'.从数据库加载元数据时间为00:00:00.5856317.

Sar*_*chi 167

实体框架(版本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.
Run Code Online (Sandbox Code Playgroud)

这是一个迟到的回复.但希望它会对某人有所帮助.

谢谢.

  • 你好..这解决了我的问题.但如果你能解释为什么这个有效,你会很好. (5认同)
  • 当尝试从数据库创建模型时,这在Visual Studio 2017中对我有用. (3认同)
  • 对不起,我是代码但不是内部流程专家.我尝试了很多方法,这种方法很有效.我很感激对这种方法的任何解释.谢谢. (2认同)

小智 23

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

在mysql控制台上运行命令:

set global optimizer_switch ='derived_merge = off'

要么

设置@@ optimizer_switch ='derived_merge = OFF'

(这个对我有用)

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

SELECT @@ optimizer_switch\G.

https://dev.mysql.com/doc/refman/5.7/en/switchable-optimizations.html

  • 从MySQL控制台而不是Workbench运行它是非常重要的.我说几个小时的经验.:( (2认同)

小智 10

上面的每个答案都可以正常工作,但是当重新启动服务器或开发机器时,我们需要一次又一次地执行所有步骤.要完全解决,我们可以在mysql配置中将此属性命名为"derived_merge = OFF".好的,要做到这一点,您需要使用de MySQL Workbench访问MySQL服务器,并打开"选项文件">"选择性能"选项卡.在Optimizer组中,查找optimizer_switch,单击复选框以启用字段,并将'derived_merge = OFF'.在services.msc和voilá中重新启动服务器!


Rec*_*diz 6

以下sql为我工作:

use adventureworks;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;
Run Code Online (Sandbox Code Playgroud)

我的MySQL版本是5.7.15,我使用Visual Studio 2015中的"EF Designer From Database"选项.

我希望它能帮助别人:)


car*_*ras 5

解决方法SET GLOBAL optimizer_switch ='derived_merge = off';