代码之家  ›  专栏  ›  技术社区  ›  Alex

实体框架自定义HistoryContext导致重新创建迁移表并失败

  •  1
  • Alex  · 技术社区  · 7 年前

    我正在使用 Oracle.ManagedDataAccess.Client Entity Framework 6.2.0 .

    dbo. 所有数据库实体前面的架构名称(命令: update-database -StartupProject MyDbProject -Verbose -Script ).

    创建表“dbo”。“MyEntity”

    从中的自定义架构中运行SQL脚本时,此行为会导致问题 Oracle DB

    在我的主数据库上下文中,我设置了以下内容( 不相关代码省略

    public class ApplicationDbContext : DbContext
    {
    
        public ApplicationDbContext() : base("ApplicationDbContext")
        {
    
        }
    
        public DbSet<MyEntity> MyEntity { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema(String.Empty);
        }
    }
    

    创建表“MyEntity”

    但是,仍然有一个地方没有受到更改的影响,那就是“\u MigrationHistory”表,它显然使用了自己的上下文。要删除此表的“dbo”,我使用了以下方法:

    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);
        }
    }
    
    public class CustomHistoryConfiguration : DbConfiguration
    {
        public CustomHistoryConfiguration()
        {
            this.SetHistoryContext("Oracle.ManagedDataAccess.Client",
                (connection, defaultSchema) => new CustomHistoryContext(connection, String.Empty));
        }
    }
    

    创建表“MyEntity”

    这两个更改结合在一起—允许首次成功运行迁移(命令: update-database -StartupProject MyDbProject -Verbose ).

    _MigrationHistory 正在 下降 没有明显的原因,EF尝试重新迁移所有表。因为已经存在表(例如 MyEntity

    ORA-00955:名称已被现有对象使用

    什么原因 _迁移历史记录 在新的迁移尝试中被丢弃?预期的行为是,EF确定迁移已经运行,并在控制台中输出没有要运行的新迁移!

    0 回复  |  直到 6 年前
    推荐文章