如何在不删除和重新创建列的情况下删除外键约束

时间:2017-08-29 21:02:46

标签: c# asp.net-mvc foreign-keys ef-migrations

这是我的UserLog模型:

public class UserLog
{
    public int Id { get; set; }
    public ApplicationUser Customer { get; set; }
    public DateTime LogDate { get; set; }
}

我是为风险管理目的而创建的。问题是每当我想从AspNetUsers表中删除用户时,我必须先从UserLog删除与用户关联的行。但是,这样做会破坏风险管理系统的整体理念。

有没有办法删除放在UserLog表上的FKConstraint?我知道如果我删除ApplicationUser并将Customer重命名为Customer_Id代码,首先会删除该行和约束,然后重新创建它,为其提供新名称(即使该行当前名为Customer_Id)。有解决方法吗?

2 个答案:

答案 0 :(得分:2)

alter table UserLog drop constraint FKconstraintName;

答案 1 :(得分:0)

正如here所解释的那样,删除不应具有外键约束并从数据库更新的实体是最简单的方法。

要回答你的问题,很难做到这一点,就是深入研究EDMX的XML并自己完成。

执行此操作的步骤,如链接中所述:

  1. 在概念模型中,删除FK属性,通常类似于ChildId等等。
  2. 仍然在概念模型中,将导航属性更改为单数。
  3. 再次在概念模型中,删除关联的ReferentialConstraint。假设您的关联名称类似于FK_Child_Parent,只需将ReferentialConstraint转储到那里。注意,如果需要,您也可以在此处设置多重性;你会在终点上设置正确的多样性。您的选项是*,1或0..1。
  4. 现在转到C-S映射内容(映射),然后删除与要删除的外键对应的ScalarProperty
  5. 最后,由于您删除了ReferentialConstraint,因此您需要添加AssociationSetMapping。您可以将其附加到XML的EntityContainerMapping部分的末尾。您可以在下面找到AssociationSetMapping的摘要。 请务必替换AssociationSetMapping中全部为大写的属性