首先使用ef6代码和mysql我得到以下异常:
Specified key was too long; max key length is 767 bytes.
要解决此问题,我创建了自定义HistoryContext
并缩短了ContextKey
长度。
并且使用MyHistoryContext
我创建了继承自DbMigrationsConfiguration<MyContext>
。
创建Configuration类后DropCreateDatabaseAlways数据库初始化程序停止工作抛出:
The DropCreateDatabaseAlways initializer did not drop or create the database backing context 'MyContext' because Migrations are enabled for the context.
A̶n̶d̶̶s̶e̶t̶t̶i̶n̶g̶̶A̶u̶t̶o̶m̶a̶t̶i̶c̶M̶i̶g̶r̶a̶t̶i̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶ (我知道它不相关。)
修改
我想重新解决这个问题:创建从Configuration
继承的DbMigrationsConfiguration<MyDbContext>
类(使用自定义HistoryContext
解决mysql中的Specified key was too long
问题)让我认为我启用了迁移通过Enable-Migrations
命令和DropCreateDatabaseAlways
停止工作(但据我所知,这是预期的行为)。但毕竟这不是一个大问题,因为我可以使用
context.Database.Create();
context.Database.Drop();
那么,我理解它是否正确?
自定义HistoryContext:
public class MyDbHistoryContext : HistoryContext
{
public MyDbHistoryContext(DbConnection existingConnection, string defaultSchema)
: base(existingConnection, defaultSchema)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<HistoryRow>()
.Property(x => x.ContextKey)
.HasMaxLength(255);
}
}