我已经阅读了很多帖子,但没有任何效果。
我尝试将默认值添加到列中,如下所示:
AlterColumn("dbo.BusinessUnit_Map", "RelationshipType", c => c.String(nullable: false, defaultValue: "RollsUpTo"));
这会产生错误:
对象' DF_dbo.BusinessUnit_Map_RelationshipType'取决于列' RelationshipType'。 ALTER TABLE ALTER COLUMN RelationshipType失败,因为一个或多个对象访问此列。
我无法在任何地方找到这种约束。下面是一个屏幕截图,显示了表上唯一的默认约束。
有一件有趣的事情是,如果我尝试删除列并重新添加它,那就可以了。只有当我使用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'
此查询的结果如下所示,它们不包含神秘约束。
答案 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]");