首页> C#> MySQL的-实体:表“ TableDetails”中的“ IsPrimaryKey”列的值为DBNu
我将Visual Studio 2013与Entity Framework 5和MySQL 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;
如果表仅由“主键”组成,则将按原样创建模型。
编辑:如果我在“ PRIMARY Keys”(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() 在 Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties(IList1
columns, IList1错误,List1& keyColumns, List1&excludeColumns, 清单1& invalidKeyTypeColumns) at
Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList1 列,布尔值和needsDefiningQuery) Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1
tableDetailsRows, EntityRegister entityRegister, IList1 entitySetsForReadOnlyEntityTypes,DbObjectType objectType)位于 Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1
tableDetailsRowsForTables, IEnumerable1 tableDetailsRowsForViews, EntityRegister实体注册) Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build(StoreSchemaDetails storeSchemaDetails) Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.CreateStoreModel() 在 Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel(List1
errors) at
Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String
storeModelNamespace, List50错误)在 Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel(EdmxHelper edmxHelper)。从数据库加载元数据花费了 00:00:00.5856317。
11个解决方案
167 votes
实体框架(版本6.1.3)和MySQL服务器(> = 5.7.6)
解决问题的一种方法是
1. Open Services (services.msc) and restart MySQL57 service.
2. Execute the following commands in MySQL.
use <>;
set global optimizer_switch='derived_merge=OFF';
3. Update the .edmx.
回复晚了。 但是希望它能对某人有所帮助。
谢谢。
Saravanan Sachi answered 2020-01-05T15:13:59Z
23 votes
这是一个已知的错误:[http://bugs.mysql.com/bug.php?id=79163]
在mysql控制台上运行命令:
设置全局optimizer_switch ='derived_merge =关闭'
要么
设置@@ optimizer_switch ='derived_merge = OFF'
(这个为我工作)
使用以下命令验证更改是否有效:
选择@@ optimizer_switch \ G
[https://dev.mysql.com/doc/refman/5.7/en/switchable-optimizations.html]
martin answered 2020-01-05T15:14:54Z
10 votes
上面的每个答案都可以正常工作,但是当服务器或开发机重新启动时,我们需要一次又一次地执行所有步骤。为了彻底解决,我们可以将这个属性'derived_merge = OFF'放入mysql配置中。好的,要做到这一点,您需要使用de MySQL Workbench访问MySQL服务器,然后打开“选项文件”>“选择性能”选项卡。 在“优化程序”组中,查找“ optimizer_switch”,单击复选框以启用一个字段,然后输入“ derived_merge = OFF”。在services.msc中重新启动服务器,然后加油!
Kolodziey answered 2020-01-05T15:15:18Z
6 votes
下面的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”选项。
我希望它可以帮助其他人:)
Recev Yildiz answered 2020-01-05T15:15:46Z
5 votes
解决方法SET GLOBALoptimizer_switch ='derived_merge = off';
caras answered 2020-01-05T15:16:06Z
3 votes
表'TableDetails'中'IsPrimaryKey'列的值为DBNull
当您尝试在实体框架中使用MySql时,就会发生这种情况。
我已经解决了这种方式:
打开MySQL 5.7 Command Line Client,输入密码,按Enter,然后输入:
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,并且在这两个版本中都可以使用!
FelipeFalanque answered 2020-01-05T15:16:44Z
2 votes
运行此脚本,使用MySql.Data.Entity nuget软件包对我来说非常理想
use YourDB;
set global optimizer_switch='derived_merge=OFF';
Frank Odoom answered 2020-01-05T15:17:04Z
1 votes
我们遇到了同样的错误。但是,我认为这是MySQL的服务器问题。
状态:
EF5
MySQL VS工具1.2.5
VS社区2015
C#
来自Database create EF Designer(我正在使用日语版,所以菜单名称是我的英语...)
结果:
MySQL 5.7.9 =>错误。
MySQL 5.6.26 =>没有错误。
modeverv answered 2020-01-05T15:18:02Z
1 votes
就我而言:
使用的模块:
实体框架6MySql数据连接器6.9.9MySQL VS工具1.2.6VS6的EF6工具
我必须这样做=> SET GLOBALoptimizer_switch ='derived_merge = off';但是,如果使用“ root”用户登录,该错误将继续。 当以“普通”用户登录时,它会创建模型。
Maxi answered 2020-01-05T15:18:36Z
0 votes
从今天开始,这是一个经过验证的ID为79163的MySql Community Server 5.7.9错误。
解决方法是,我重塑了应用程序以使用Code First练习
(ADO.NET实体数据对象->空代码优先模型)
并手动添加所有对象及其属性。
使用的模块:
实体框架6
MySql数据连接器6.8.9
MySQL VS工具1.2.5
VS6的EF6工具
magarisi answered 2020-01-05T15:19:31Z
0 votes
我已经找到了解决此类错误的好方法。
1.解决方案(数据库优先)无需尝试更新.edmx文件中的现有模型,而是在edmx中右键单击您的实体之一,然后选择->转到modelbrowser(新的注册将出现在项目地图浏览器中)。现在,选择要更新的实体,右键单击并进行更新。 就我而言,它每次都可以工作而无需在mysql中关闭任何功能。 但是有可能您将被迫手动更改某些关系。如果这里有什么问题(在我的情况下,非fk / pk键不会有问题。如果删除fk并尝试自己订购所有关系,则您的数据库可能会被删除。但是,如果您只更新非主要/ 外键属性或仅添加新表。
编辑:此解决方案非常适合删除,更新和添加新关系。 当对fk / pk属性执行更新时,会导致问题!
如果您的表已删除,那么只需创建一个具有相同首选项的新表即可。
2.解决方案(首先更新数据库,当必须更新pk / fk键时)放下表格并创建一个新表格。 这总共需要3分钟
我希望我能帮上一点忙,这个错误使我在过去的两周里发疯了!
ps。 在覆盖之前,我从未经历过这种类型的错误! mysql中现有关系中的外键。 然后,我尝试使用实体框架(首先是数据库)更新关系,此后出现dbNullBug。 我能够通过添加和删除现有属性来手动管理我的实体,但这确实很累人。 解决方案1对我来说效果很好,如果我需要更新外键,我只需删除现有模型并创建一个新模型即可。
I_zaski08 answered 2020-01-05T15:20:20Z