首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL - Entity :表'TableDetails‘中列'IsPrimaryKey’的值为DBNull

MySQL - Entity :表'TableDetails‘中列'IsPrimaryKey’的值为DBNull
EN

Stack Overflow用户
提问于 2015-11-07 04:21:20
回答 11查看 59.7K关注 0票数 53

我使用的是Visual Studio2013Entity Framework5和MySQL Server5.7.9

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

'System.Data.StrongTypingException:表'TableDetails‘中列'IsPrimaryKey’的值为DBNull。-> System.InvalidCastException:指定的cast无效。

我知道以前有人问过这个问题,但我还没有找到任何解决方案。另外,我也没有降级到MySQL 5.6的选项。

即使对于一个简单的表,也会出现这个问题。

示例表

代码语言:javascript
复制
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;

如果表只由主键组成,那么模型就像它应该创建的那样被创建。

主键编辑:如果我将两个字段都设为主键,则创建模型时没有任何错误。

有人知道这是怎么回事吗?

致以亲切的问候。

完整的错误堆栈:

无法生成模型,因为发生了以下异常:'System.Data.StrongTypingException:表'TableDetails‘中'IsPrimaryKey’列的值为DBNull。-> System.InvalidCastException:指定的cast无效。at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey() --内部异常堆栈跟踪结束- at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey() at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties(IList1 columns, IList1 errors,List1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList1 & excludedColumns,List1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList1 columns,Boolean& needsDefiningQuery) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1 tableDetailsRows, EntityRegister entityRegister, IList1 entitySetsForReadOnlyEntityTypes,Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1 tableDetailsRowsForTables, IEnumerable1 tableDetailsRowsForViews的DbObjectType objectType),错误) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build(StoreSchemaDetails ) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.CreateStoreModel() at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel(List1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List1 entityRegister) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel(EdmxHelper edmxHelper)‘。从数据库加载元数据耗时00:00:00.5856317。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2016-02-16 10:22:36

实体框架(版本6.1.3)和MySQL服务器(>= 5.7.6)

解决问题的一种方法是,

代码语言:javascript
复制
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.

这是一个迟来的回复。但希望它能帮助到一些人。

谢谢。

票数 166
EN

Stack Overflow用户

发布于 2016-02-05 12:25:56

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

在mysql控制台上运行命令:

set global optimizer_switch='derived_merge=off‘

set @@optimizer_switch=‘派生合并=OFF’

(这个对我很有效)

使用以下命令验证更改是否生效:

选择@@optimizer_switch\G

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

票数 23
EN

Stack Overflow用户

发布于 2017-04-01 23:56:01

上面的每个答案都工作得很好,但当服务器或dev-machine重启时,我们需要一遍又一遍地执行所有步骤。为了完全解决这个问题,我们可以将这个属性'derived_merge=OFF‘放在mysql配置中。好的,为此,您需要使用de MySQL工作台访问您的MySQL服务器,并打开"Option File“> Select Performance选项卡。在优化器组中,查找optimizer_switch,单击复选框以启用一个字段,然后设置'derived_merge=OFF‘。在services.msc中重新启动您的服务器,瞧!

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33575109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档