系统:SQL Server 上的 .NET Framework 4.7.2、Entity Framework 6(不是 EF Core)。代码优先方法。
这可能听起来很奇怪或有趣,但这是一个真实的问题。 当我使用“Add-migration”添加一个空迁移,然后添加 SQL 在“Up”中创建两个或三个视图并将它们放在“Down”中时,如果我将
Down()
作为第一个语句调用,会产生任何副作用吗在 Up()
中,以便删除目标数据库上这些视图的任何可能手动创建的版本 - 需要说明的是,使用 DROP IF EXISTS
? Down Sql 是故障安全的
对
Down
的调用是否会以某种方式神奇地调用其他 EF 例程,例如影响版本控制表 _MigrationHistory
或更改迁移的执行方式?或者它只是像其他程序一样调用的简单过程?
我认为这只是一个简单的例程,为了在按照我想要的方式创建数据库对象之前进行适当的清理,只需调用已经可用的清理例程就会派上用场。但我的一些同事不同意,并说这是不行的。
100%这是一个“不”。不是因为它会隐式地创建某种递归或故障点,而是因为对于任何取代你的人来说,这都将是一场维护噩梦。
如果您的目标是确保表不以 Down 删除表的方式存在,请将其分解为它自己的函数,Down 和 Up 都会显式调用该函数。
private void RemoveIfExists(string tableName)
{
//Remove tableName if it exists.
}
public void Up()
{
RemoveIfExists("SomeTable");
//Build 'SomeTable'.
}
public void Down()
{
RemoveIfExists("SomeTable");
}