覆盖 EntityFramework Code First 迁移中的“dbo”架构名称

osk*_*skr 5 c# oracle entity-framework-6 entity-framework-migrations

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   base.OnModelCreating(modelBuilder);
   modelBuilder.HasDefaultSchema(string.Empty);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

自定义历史上下文:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

和数据库配置:

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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

看起来 EF 丢失了并且此时无法找到迁移历史记录。

当我评论时,SetHistoryContextFactory其中的指令Configuration适用于后续add-migration命令,但这种解决方法对于我想要从头开始运行所有迁移(例如部署)的情况来说是不够的。

有谁知道我是否可以很好地完成此任务,或者是否有更好的解决方法?

小智 0

再次尝试运行Enable-Migrations -force。然后运行​​Add-Migration SomeDescription \xe2\x80\x93IgnoreChanges。之后,运行“ Update-Database - Verbose ”。这对我有用

\n