删除具有不可见约束的列

时间:2015-09-17 04:30:07

标签: sql-server asp.net-mvc ef-code-first constraints

我已经阅读了很多帖子,但没有任何效果。

我尝试将默认值添加到列中,如下所示:

        AlterColumn("dbo.BusinessUnit_Map", "RelationshipType", c => c.String(nullable: false, defaultValue: "RollsUpTo"));

这会产生错误:

  

对象' DF_dbo.BusinessUnit_Map_RelationshipType'取决于列' RelationshipType'。   ALTER TABLE ALTER COLUMN RelationshipType失败,因为一个或多个对象访问此列。

我无法在任何地方找到这种约束。下面是一个屏幕截图,显示了表上唯一的默认约束。

enter image description here

有一件有趣的事情是,如果我尝试删除列并重新添加它,那就可以了。只有当我使用AlterColumn失败时才会这样做。

我试过放弃这样的约束:

            Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT DF_dbo.BusinessUnit_Map_RelationshipType");

但是.是一个语法错误,所以我用三个下划线替换它:

            Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT DF_dbo___BusinessUnit_Map_RelationshipType");

但系统以

响应
  

' DF_dbo ___ BusinessUnit_Map_RelationshipType'不是约束。   无法删除约束。查看以前的错误。

这个约束在哪里?如何将其关闭?

更新

一个建议是尝试此查询来搜索该约束:

select o.type_desc,o2.name as parent_name,*  from sys.objects as o
left join sys.objects as o2 on o.parent_object_id=o2.object_id
where o.name='DF_dbo.BusinessUnit_Map_RelationshipType'

这返回零结果,因此我对其进行了修改,以了解它会告诉我有关BusinessUnit_Map

的内容
select o.type_desc,o2.name as parent_name,*  from sys.objects as o
left join sys.objects as o2 on o.parent_object_id=o2.object_id
where o2.name='BusinessUnit_Map'

此查询的结果如下所示,它们不包含神秘约束。

enter image description here

1 个答案:

答案 0 :(得分:0)

编辑:

使用此命令,您将找到名称的对象:

select o.type_desc,o2.name as parent_name,*  from sys.objects as o
left join sys.objects as o2 on o.parent_object_id=o2.object_id
where o.name='DF_dbo.BusinessUnit_Map_RelationshipType'

如果它确实是默认约束,请查看“type_desc”列。 “parent_name”列应该告诉您绑定的表的名称。

希望你能找到你的“隐形约束”: - )

- 旧文字

用方括号试试。通常在名称中不允许使用圆点,空格和其他“破坏”键:

Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT [DF_dbo.BusinessUnit_Map_RelationshipType]");