在删除列的迁移操作期间,如何在尝试删除列之前先生成 SQL 以检查该列是否存在?
对于删除列操作,实体框架当前生成这样的 sql 来删除列:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL generated:
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
Run Code Online (Sandbox Code Playgroud)
如何更改 SQL 以首先检查列是否存在:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL desired:
IF EXISTS (SELECT * FROM sys.columns WHERE object_id = Object_id('dbo.Table') AND name = 'Column')
BEGIN
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
END
Run Code Online (Sandbox Code Playgroud)
我知道可以通过继承自SqlServerMigrationSqlGenerator
. 我这样做的尝试未能将默认放置列逻辑包装在一个IF
块中。请参阅下面的示例:
public class CustomSqlServerMigrationSqlGenerator: SqlServerMigrationSqlGenerator
{
/// <summary>
/// Drop column only …
Run Code Online (Sandbox Code Playgroud) entity-framework sql-generation ef-code-first entity-framework-6 entity-framework-migrations