使用可空外键时DELETE与REFERENCE约束冲突

时间:2017-04-20 06:33:19

标签: c# entity-framework code-first

我正在使用ASP.Net MVC。我有两个类,一对多和多对多相关。

public class Image
{
    public Image() { }

    public long Id { get; set; }

    // other properties are removed for clarity

    public virtual IList<Branch> Branches { get; set; }
}


public class Branch
{
    public Branch() { }

    public long Id { get; set; }

    // other properties are removed for clarity

    public long? ImageId { get; set; }
    public virtual Image Image { get; set; }

    public virtual IList<Image> Images { get; set; }
}

分支可以有多个图像(Branch.Images)。但我想分别存储他们的主图像(Branch.Image)。我认为这可能对速度有所帮助。由于分支可能没有图像,因此该属性定义为可以为空。作为引用声明,这种定义应该在Branches表中定义一个外键,它确实如此。但问题是当正在删除作为分支主图像的图像时。它会导致此错误:

  

DELETE语句与REFERENCE约束冲突   “FK_Branches_Images_ImageId”。冲突发生在   数据库“数据库”,表“分支”,列“ImageId”。该   声明已被终止。

但它应该将外键设置为null,因为该分支没有主图像。

我是否应该使用Fluent API,否则模型定义会出现问题?

1 个答案:

答案 0 :(得分:0)

自动设置为null仅在将子级也加载到上下文中时才起作用,而不仅仅是父实体。您需要先将孩子包括在父母中,然后再删除它。