[编辑]这个问题解决了!请参阅帖子末尾的说明.
[编辑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)