MySQL – 实体:表“TableDetails”中的列“IsPrimaryKey”的值是DBNull

我正在使用entity framework5和M ySQL Server 5.7.9的 Visual Studio 2013

当试图从数据库创build模型( 或“从数据库更新模型” )时,出现以下消息:

'System.Data.StrongTypingException:表'TableDetails'中'IsPrimaryKey'列的值是DBNull。 —> System.InvalidCastException:指定的转换无效。

我知道这个问题之前已经被问过了,但是我还没有find任何解决办法。 我也没有select降级到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; 

如果表仅由主键组成,则该模型正在被创build。

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

有没有人有这个想法?

亲切的问候。

完整的错误堆栈:

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

entity framework(版本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. 

这是一个迟到的答复。 但希望它能帮助别人。

谢谢。

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

在mysql控制台上运行命令:

设置全局optimizer_switch ='derived_merge = off'

要么

设置@@ optimizer_switch ='derived_merge = OFF'

(这个为我工作)

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

SELECT @@ optimizer_switch \ G

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

上面的每个答案都可以正常工作,但是当服务器或者dev-machine重新启动的时候,我们需要一次又一次地做所有的步骤。 为了完全解决,我们可以把这个属性'derived_merge = OFF'放在mysqlconfiguration中。 好吧,要做到这一点,您需要使用de MySQL工作台访问您的MySQL服务器,并打开“选项文件”>“select性能”选项卡。 在Optimizer组中,查找optimizer_switch,单击checkbox启用一个字段,并将“derived_merge = OFF”。 重新启动您的服务器在services.msc和voilá!

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

下面的SQL为我工作:

 use adventureworks; set global optimizer_switch='derived_merge=off'; set optimizer_switch='derived_merge=off'; select @@optimizer_switch; select @@GLOBAL.optimizer_switch; 

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

我希望它可以帮助别人:)

表“TableDetails”中的列“IsPrimaryKey”的值是DBNull

当您尝试在Entity Framework中使用MySql时会发生这种情况。

我已经解决了这个问题:

打开MySQL 5.7命令行客户端,input你的密码,按回车键,然后input:

 set global optimizer_switch='derived_merge=off'; set optimizer_switch='derived_merge=off'; select @@optimizer_switch; select @@GLOBAL.optimizer_switch; 

重新启动Visual Studio你很好去,我已经尝试VS 2013和VS 2017,并在两个工作!

运行这个脚本,在使用MySql.Data.Entity块体包的时候,它完美的工作

 use YourDB; set global optimizer_switch='derived_merge=OFF'; 

我们遇到了同样的错误。 但是,我认为这是MySQL的服务器问题。

状态:

  • EF5
  • MySQL VS工具1.2.5
  • VS社区2015
  • C#
  • 从数据库创buildEFdevise师(我使用日本版,所以菜单名称是我的英语…)

结果:

  • MySQL 5.7.9 =>错误。
  • MySQL 5.6.26 =>没有错误。

在我的情况下:

使用的模块:

Entity Framework 6 MySql数据连接器6.9.9 MySQL VS Tools 1.2.6用于VS2015的EF6工具

我必须这样做=> SET GLOBAL optimizer_switch ='derived_merge = off'; 但如果用“root”用户login,错误仍然存​​在。 当用“普通”用户login时,它创build模型OK。

从今天起,这是一个ID 79163validation的MySql社区服务器5.7.9错误。

作为一种解决方法,我重新调整了应用程序以使用Code First实践

ADO.NET实体数据对象 – >空代码优先模型

并手动添加所有对象及其属性。

使用的模块:

  • entity framework6
  • MySql数据连接器6.8.9
  • MySQL VS工具1.2.5
  • 适用于VS2013的EF6工具

我发现这种types的错误很好的解决方法。

1.解决scheme(数据库优先)不要尝试更新.edmx文件中的现有模型,请右键单击edmx中的某个实体,然后select – >转到modelbrowser(新的寄存器出现在项目映射浏览器中)。 现在select要更新的实体,右键单击并执行更新。 在我的情况下,它每次都工作,而不需要在MySQL中切换任何东西。 但是可能会发生这样的情况,您将被迫手动更改某些关系。 如果在这里出了什么问题(在我的情况下,没有非fk / pk键的问题,如果你删除了一个fk并试图自己sorting所有的关系,你的db可能会被删除,但是如果你只是更新不是主/外键属性或者只是添加一个新表。

编辑:这个解决scheme非常适用于删除,更新和添加新的关系。 当在fk / pk属性上执行更新时,会导致问题!

如果您的表已被删除,只需创build一个具有相同首选项的新表。

2.解决scheme(数据库首先,当pk / fk键必须更新时)删除表并创build一个新的表。 这需要3分钟

我希望我能帮上一点忙,这个bug在过去的2周里让我疯狂了!

ps我没有经历过这种types的错误,直到我覆盖! mysql中现有关系的外键。 然后我试图更新与entity framework(数据库第一)的关系,从那时起在dbNullBug出现。 我能够通过添加和删除现有的属性来手动pipe理我的实体,但是这真的让人筋疲力尽。 解决scheme1对我来说效果不错,如果我需要更新外键我只是放下现有的模型,并创build一个新的。