在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