mag*_*isi 53 c# mysql entity-framework
我正在使用Visual Studio 2013与Entity Framework 5和M ySQL 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;
Run Code Online (Sandbox Code Playgroud)
如果表仅包含主键,则表示正在创建模型.
编辑: 如果我使两个字段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 ()at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties(IList
1 columns, IList1 errors,List1& keyColumns, List1&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,DbObjectType objectType)在Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build(StoreSchemaDetails)的Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable1 tableDetailsRowsForTables, IEnumerable1 tableDetailsRowsForViews,EntityRegister entityRegister)中. storeSchemaDetails)在Microsoft.Data.Entity.Design.VisualStudio.ModelWizar Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel中的Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel(List1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List1 errors)中的d.Engine.ModelGenerator.CreateStoreModel()(EdmxHelper edmxHelper)'.从数据库加载元数据时间为00:00:00.5856317.
Sar*_*chi 167
实体框架(版本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.
Run Code Online (Sandbox Code Playgroud)
这是一个迟到的回复.但希望它会对某人有所帮助.
谢谢.
小智 23
这是一个知道错误:http://bugs.mysql.com/bug.php?id = 79163
在mysql控制台上运行命令:
set global optimizer_switch ='derived_merge = off'
要么
设置@@ optimizer_switch ='derived_merge = OFF'
(这个对我有用)
使用此命令验证更改是否有效:
SELECT @@ optimizer_switch\G.
https://dev.mysql.com/doc/refman/5.7/en/switchable-optimizations.html
小智 10
上面的每个答案都可以正常工作,但是当重新启动服务器或开发机器时,我们需要一次又一次地执行所有步骤.要完全解决,我们可以在mysql配置中将此属性命名为"derived_merge = OFF".好的,要做到这一点,您需要使用de MySQL Workbench访问MySQL服务器,并打开"选项文件">"选择性能"选项卡.在Optimizer组中,查找optimizer_switch,单击复选框以启用字段,并将'derived_merge = OFF'.在services.msc和voilá中重新启动服务器!
以下sql为我工作:
use adventureworks;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';
select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;
Run Code Online (Sandbox Code Playgroud)
我的MySQL版本是5.7.15,我使用Visual Studio 2015中的"EF Designer From Database"选项.
我希望它能帮助别人:)