【问题标题】:EF 6 Code First __MigrationHistory in dbo schema by defaultEF 6 Code First __MigrationHistory 默认在 dbo 模式中
【发布时间】:2015-02-05 22:32:32
【问题描述】:

我是 Code first Entity 框架的新手,在第一次运行我的应用程序后登录到数据库时,当我看到“__MigrationHistory”表时有点困惑。

我现在了解此表的必要性,但不喜欢它在用户表中的标准 dbo 模式中,我认为它的突兀和风险。

我的第一个想法是将其移至系统文件夹。在研究如何在 EF 上下文中实现这一点时,我能找到的只是如何将其从系统移动到 dbo。

我现在感觉 __MigrationHistory 应该默认在系统文件夹中创建...是这样吗?

如何配置我的上下文以默认管理/引用系统文件夹中的迁移历史表?

这是我的上下文,是我做错了什么还是缺少某些配置?

public class MyContext : DbContext, IDataContext
{
    public IDbSet<Entity> Entities { get; set; }

    public MyContext()
        : base("ConnectionString")
    {

    }

    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

【问题讨论】:

  • 它实际上在默认情况下位于 System 文件夹中,但在 EF 6 中更改了此行为。

标签: c# sql-server entity-framework ef-code-first


【解决方案1】:

有一种移动 __MigrationHistory 的技术。该表有它自己的上下文 (System.Data.Entity.Migrations.History.HistoryContext),您可以覆盖它:

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
        base.OnModelCreating(modelBuilder); 
        modelBuilder.Entity<HistoryRow>().ToTable(tableName: "MigrationHistory", schemaName: "admin"); 
        modelBuilder.Entity<HistoryRow>().Property(p => p.MigrationId).HasColumnName("Migration_ID"); 
    } 
} 

那你需要register它:

public class ModelConfiguration : DbConfiguration 
{ 
    public ModelConfiguration() 
    { 
        this.SetHistoryContext("System.Data.SqlClient", 
            (connection, defaultSchema) => new MyHistoryContext(connection, defaultSchema)); 
    } 
} 

【讨论】:

    【解决方案2】:

    您可以尝试在种子方法中使用context.Database.ExecuteSqlCommand(); 执行EXEC sys.sp_MS_marksystemobject __MigrationHistory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多