更改EF __Migration History表的名称是否危险?

时间:2015-09-24 21:04:30

标签: sql-server entity-framework

昨天我问 this question 关于在使用Code First方法时更改Entity Framework生成的__Migration History表的名称。提供的链接有助于说明如何做我们想要的事情(以及“想要”我的意思是我们被DBA强迫进入的事情),但是也留下了一些非特定且可怕的警告说,< / p>

  

预防措施

     

更改迁移历史记录表非常强大,但您需要这样做   小心不要过头了。 EF运行时当前不检查是否   自定义迁移历史记录表与   运行。如果不是您的应用程序可能会在运行时中断或表现   以不可预知的方式。如果您使用多个,这一点就更为重要   每个数据库的上下文,在这种情况下,多个上下文可以使用相同的上下文   迁移历史记录表,用于存储有关迁移的信息。

我们尝试使用此警告来向DBA团队推断,告诉他们我们不应该搞乱事情,因为“这里是龙”。他们的反应是,“听起来更像是改变内容或表结构的危险,而不是名称。继续尝试,看看会发生什么。”

这里有没有人更改__Migrations History表的名称,结果是什么?这很危险吗?

1 个答案:

答案 0 :(得分:2)

可以更改迁移历史记录表的名称。 但是,您必须通过HasDefaultSchema类的OnModelCreating方法中使用模式名称调用DbContext方法来告诉EF:

public partial class CustomerDatabasesModel : DbContext
{   
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("CustomerDatabases");

        // Fluent API configuration
    }   
}


这将导致EF为所有数据库表创建“CustomerDatabases”前缀。 因此,在此示例中,“CustomerDatabases”替换了表的“dbo”前缀标准。您的迁移历史记录表的名称为CustomerDatabases.__MigrationHistory

所以实际上,你改变了数据库的所有者名称(第一部分),第二部分“__MigrationHistory”保持不变。


使用方案:

如果您使用多个DbContext,通常会执行此操作。 因此,您可以在单个数据库中拥有多个MigrationHistory表,每个上下文对应一个。

原因是您应该仔细测试并在之前执行数据库备份。

请查看此答案: Entity-Framework: On Database, multiple DbContexts