C# 默认情况下,EF 6在dbo模式中编码优先迁移历史记录

C# 默认情况下,EF 6在dbo模式中编码优先迁移历史记录,c#,sql-server,entity-framework,ef-code-first,C#,Sql Server,Entity Framework,Ef Code First,我是第一个编写实体框架代码的新手,在第一次运行我的应用程序后登录数据库时,当我看到“u MigrationHistory”表时,我有点困惑 我现在理解了这个表的必要性,但不喜欢它位于用户表中的标准dbo模式中,我认为它很显眼,而且有风险 我的第一个想法是将其移动到系统文件夹。在研究如何在EF上下文中实现这一点时,我所能找到的就是如何将它从系统移动到dbo 我现在觉得uu MigrationHistory默认情况下应该在系统文件夹中创建。。。是这样吗 默认情况下,如何配置上下文以管理/引用系统文件

我是第一个编写实体框架代码的新手,在第一次运行我的应用程序后登录数据库时,当我看到“u MigrationHistory”表时,我有点困惑

我现在理解了这个表的必要性,但不喜欢它位于用户表中的标准dbo模式中,我认为它很显眼,而且有风险

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

我现在觉得uu 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>();
    }
}
公共类MyContext:DbContext,IDataContext
{
公共IDbSet实体{get;set;}
公共MyContext()
:base(“连接字符串”)
{
}
public new IDbSet Set(),其中tenty:class
{
返回base.Set();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
}
}

您可以尝试使用
context.Database.ExecuteSqlCommand()在种子方法中执行
EXEC sys.sp\u MS\u marksystemobject\u MigrationHistory

有一种移动迁移历史的技术。该表有自己的上下文(),您可以覆盖它:

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"); 
    } 
} 

默认情况下,它实际上位于系统文件夹中,但在EF 6中此行为发生了更改。
public class ModelConfiguration : DbConfiguration 
{ 
    public ModelConfiguration() 
    { 
        this.SetHistoryContext("System.Data.SqlClient", 
            (connection, defaultSchema) => new MyHistoryContext(connection, defaultSchema)); 
    } 
}