在EntityFramework Code First Migrations中覆盖“dbo”模式名称

我正在尝试使用EntityFramework Codefirst和Oracle数据库创建一个与模式无关的模型,但EF使用dbo作为默认模式迁移模式。 我重写了我的DBContext上的OnModelCreating方法来解决这个问题,并在connectionString中使用用户

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   base.OnModelCreating(modelBuilder);
   modelBuilder.HasDefaultSchema(string.Empty);
}

问题是__MigrationHistory忽略这个默认模式,并且在运行第一次迁移时出现此错误:

ORA-01918:用户'dbo'不存在

尝试使用此msdn条目自定义此表的架构。

CustomHistoryContext:

public class CustomHistoryContext : HistoryContext
{
    public CustomHistoryContext(DbConnection dbConnection, string defaultSchema)
            : base(dbConnection, defaultSchema) {}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.HasDefaultSchema(String.Empty);
    }
}

和DBConfiguration:

public sealed class Configuration :
        DbMigrationsConfiguration<Model.MyDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        SetHistoryContextFactory("Oracle.ManagedDataAccess.Client",
                                 (connection, defaultSchema) => new CustomHistoryContext(connection, defaultSchema));
    }

    protected override void Seed(Model.Model1 context)
    {
    }
}

并且对于第一次迁移工作良好。 但是,当我修改我的实体模型并尝试使用add-migration命令反映此更改时,我得到以下错误:

无法生成显式迁移,因为以下显式迁移未完成:[201706281804589_initial,201706281810218_pp2]。 在尝试生成新的显式迁移之前应用待处理的显式迁移。

EF看起来很迷茫,在这一点上找不到迁移历史。

当我在Configuration注释SetHistoryContextFactory指令时,它适用于后续的add-migration命令,但对于想要像部署一样从头开始运行所有迁移的情况,此解决方法还不够。

有没有人知道我是否能够完成这项工作,或者有更好的解决方法?


再次尝试runnig Enable-Migrations -force 。 然后运行Add-Migration SomeDescription -IgnoreChanges 。 之后,运行“ 更新数据库 - 详细 ”。 这对我有用

链接地址: http://www.djcxy.com/p/15985.html

上一篇: Override "dbo" schema name in EntityFramework Code First Migrations

下一篇: Code First Migration on Production