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错误,List1& keyColumns, List
1&excludedColumns,List1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList
Microsoft.Data.Entity上的Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1 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(IEnumerable1 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.GenerateModel1 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一个新的。