admin

DropColumn有条件地在迁移中

sql

我想在Up迁移中执行删除列的操作。我正在使用EF 5。

DropColumn("dbo.MyObjects", "AttributeId");

问题是,在某种程度上,数据库实例的一部分没有该列(长话怎么说)。我正在考虑将其删除Sql并进行搜索sys.columns,或者将DropColumn包装在中try ... catch

但是,也许有某种已知的方法可以对Entity Framework进行迁移?


阅读 208

收藏
2021-06-07

共1个答案

admin

我的列上还存在一个默认约束,因此得到以下结果:

public override void Up()
{
    Sql(@"IF EXISTS(
     SELECT 1 FROM sys.columns c
     INNER JOIN sys.tables t ON t.object_id = c.object_id
     WHERE c.name = 'AttributeId' AND t.name = 'MyObjects')
     BEGIN
       DECLARE @AttributeIdDefConstraint nvarchar(128)
       SELECT @AttributeIdDefConstraint = name
       FROM sys.default_constraints
       WHERE parent_object_id = object_id(N'dbo.MyObjects')
         AND col_name(parent_object_id, parent_column_id) = 'AttributeId';
       IF @AttributeIdDefConstraint IS NOT NULL
       BEGIN
     EXECUTE('ALTER TABLE [dbo].[MyObjects] DROP CONSTRAINT ' + @AttributeIdDefConstraint)
       END
       ALTER TABLE [dbo].[MyObjects] DROP COLUMN [AttributeId]
     END");
}

希望可以节省时间。

2021-06-07