相关疑难解决方法(0)

具有MySql和迁移的实体框架失败,因为"最大密钥长度为767字节"

[编辑]这个问题解决了!请参阅帖子末尾的说明.

[编辑2]好的,这个线程已经过时了,MySQL Connector的新版本已经使用MySQL EF解析器处理了这个问题.在这个帖子上寻找@KingPong的答案.不过,我还没有测试过.

我正在尝试使用MySql和EntityFramework进行迁移,但似乎有些错误.

当我进入Update-Database -Verbose包管理器控制台时,EF执行一些将"镜像"我的模型类的查询,一切都很完美,但是EF尝试执行此查询:

create table `__MigrationHistory` 
(
  `MigrationId` varchar(150)  not null 
  ,`ContextKey` varchar(300)  not null 
  ,`Model` longblob not null 
  ,`ProductVersion` varchar(32)  not null
  ,primary key ( `MigrationId`,`ContextKey`) 
 ) engine=InnoDb auto_increment=0
Run Code Online (Sandbox Code Playgroud)

结果是: Specified key was too long; max key length is 767 bytes

我试图将我的数据库排序规则更改为utf-8,但仍然相同.也许关键长度是450个字符,做UTF-8数学(​​我可能错了),我认为它试图创建一个大约1800字节长度的密钥.

由于我是EF的新手,我遵循了一些教程,他们告诉我这样做:

    public Configuration()
    {
        AutomaticMigrationsEnabled = false;

        SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
    }
Run Code Online (Sandbox Code Playgroud)

也许这个SQL生成器做错了,或者EF本身要求生成器生成一个高达767字节的密钥.

我该如何解决这个问题,避免这个问题并让它与MySql一起使用?

[编辑] 好的,这个问题解决了.你必须告诉EF它必须改变它生成__MigrationHistory表的方式.

我做了什么:首先,MySqlHistoryContext.cs用这个内容创建一个名为(或任何你想要的)文件:

...
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Migrations.History;


namespace [YOUR NAMESPACE].Migrations //you …
Run Code Online (Sandbox Code Playgroud)

c# mysql entity-framework

33
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×1

entity-framework ×1

mysql ×1