我想在Up迁移中执行删除列的操作。我正在使用EF 5。
Up
DropColumn("dbo.MyObjects", "AttributeId");
问题是,在某种程度上,数据库实例的一部分没有该列(长话怎么说)。我正在考虑将其删除Sql并进行搜索sys.columns,或者将DropColumn包装在中try ... catch。
Sql
sys.columns
try ... catch
但是,也许有某种已知的方法可以对Entity Framework进行迁移?
我的列上还存在一个默认约束,因此得到以下结果:
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"); }
希望可以节省时间。