我是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>();
}
}
答案 0 :(得分:2)
有一种移动__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));
}
}
答案 1 :(得分:0)
您可以尝试使用EXEC sys.sp_MS_marksystemobject __MigrationHistory
context.Database.ExecuteSqlCommand();