我想在我的Up
迁移中执行一个列删除。我正在使用EF 5。
DropColumn("dbo.MyObjects", "AttributeId");
问题是,在某种程度上,部分数据库实例没有该列(长篇故事如何)。我正在考虑将其删除Sql
并在sys.columns
中搜索,或将DropColumn包装在try ... catch
中。
但也许有一些已知的方法来实现Entity Framework迁移?
答案 0 :(得分:1)
我的列上也有一个默认约束,因此最终得到以下结果:
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");
}
希望能节省一个时间。