EF-迁移:在 Up 中调用 Down 的副作用?

问题描述 投票:0回答:1

系统: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
或更改迁移的执行方式?或者它只是像其他程序一样调用的简单过程?

我认为这只是一个简单的例程,为了在按照我想要的方式创建数据库对象之前进行适当的清理,只需调用已经可用的清理例程就会派上用场。但我的一些同事不同意,并说这是不行的。

c# entity-framework entity-framework-migrations
1个回答
0
投票

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.