mysql用户实体表_首页> C#> MySQL的-实体:表“ TableDetails”中的“ IsPrimaryKey”列的值为DBNu...

首页> 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值