EF 6循环或多个级联路径

时间:2016-06-21 09:54:48

标签: entity-framework entity-framework-6

我尝试从我的模型创建数据库,但我不断收到错误Introducing FOREIGN KEY constraint 'FK_dbo.Reports_dbo.UserProfiles_UserId' on table 'Reports' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.

任何人都知道我的模型/设置可能出现什么问题?

这些都是使用的模型

public class Report {
    [Key]
    public int Id { get; set; }

    [Required]
    public string Number { get; set; }
    public bool Synced { get; set; }

    public DateTime CreationDate { get; set; }

    public int NewCommentId { get; set; }
    public virtual Comment NewComment { get; set; }

    public int UserId { get; set; }
    public virtual UserProfile User { get; set; }

    public virtual ICollection<Comment> Comments { get; set; }
    public virtual ICollection<Photo> PhotosBefore { get; set; }
    public virtual ICollection<Photo> PhotosAfter { get; set; }
}
public class Photo {
    [Key]
    public int Id { get; set; }
    public string Image { get; set; }
    public bool Synced { get; set; }

    public DateTime CreationDate { get; set; }

    public int ReportId { get; set; }
    public virtual Report Report { get; set; }

    public int UserId { get; set; }
    public virtual UserProfile User { get; set; }
}
public class Comment {
    [Key]
    public int Id { get; set; }

    public DateTime CreationDate { get; set; }
    public string Text { get; set; }

    public int ReportId { get; set; }
    public virtual Report Report { get; set; }

    public int UserId { get; set; }
    public virtual UserProfile User { get; set; }
}
public class UserProfile {
    [Key]
    public int Id { get; set; }
    public string Stamnummer { get; set; }
    public string Leverancier { get; set; }


    public virtual ICollection<Comment> Comments { get; set; }
    public virtual ICollection<Report> Reports { get; set; }
    public virtual ICollection<Photo> Photos { get; set; }
}

1 个答案:

答案 0 :(得分:0)

为了确定,我们需要了解如何使用User方法中的模型构建器配置关系。根据您提供的错误消息,您似乎已配置关系,以便将其中一个实体配置为从两个或多个其他实体中删除级联。

作为一个例子(可能不是这种情况,而只是描述问题的一种方法):

CommentsUser

有一对多的关系

ReportsReport

有一对多的关系

CommentsComment

有一对多的关系

User已配置为需要Comment

Report已配置为需要Report

User已配置为需要one

需要关系的实体User一侧的任何一对多关系将默认配置为删除时级联。在这种情况下,如果Reports被删除,则会触发CommentsReport的级联。每个Comments也会导致{{1}}上的级联。

解决方案是禁用其中一个关系的级联删除。你可以找到一个类似的问题here来描述我上面提到的内容。