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