昨天我问 this question 关于在使用Code First方法时更改Entity Framework生成的__Migration History
表的名称。提供的链接有助于说明如何做我们想要的事情(以及“想要”我的意思是我们被DBA强迫进入的事情),但是也留下了一些非特定且可怕的警告说,< / p>
预防措施
更改迁移历史记录表非常强大,但您需要这样做 小心不要过头了。 EF运行时当前不检查是否 自定义迁移历史记录表与 运行。如果不是您的应用程序可能会在运行时中断或表现 以不可预知的方式。如果您使用多个,这一点就更为重要 每个数据库的上下文,在这种情况下,多个上下文可以使用相同的上下文 迁移历史记录表,用于存储有关迁移的信息。
我们尝试使用此警告来向DBA团队推断,告诉他们我们不应该搞乱事情,因为“这里是龙”。他们的反应是,“听起来更像是改变内容或表结构的危险,而不是名称。继续尝试,看看会发生什么。”
这里有没有人更改__Migrations History
表的名称,结果是什么?这很危险吗?
答案 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表,每个上下文对应一个。
原因是您应该仔细测试并在之前执行数据库备份。