使DropCreateDatabase始终使用自定义DbMigrationsConfiguration

时间:2013-12-26 09:40:01

标签: entity-framework-6

首先使用ef6代码和mysql我得到以下异常:

Specified key was too long; max key length is 767 bytes.

要解决此问题,我创建了自定义HistoryContext并缩短了ContextKey长度。 并且使用MyHistoryContext我创建了继承自DbMigrationsConfiguration<MyContext>

的Configuration类

创建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);
    }
}

0 个答案:

没有答案