实体框架多对多级联删除单向

时间:2016-02-22 16:58:07

标签: c# entity-framework

我有两个实体:Reports和FileRequests。这些之间存在多对多的关系。

所以Report.cs有

 public virtual ICollection<FileRequest> FileRequests { get; set; }

FileRequest.cs有

 public ICollection<Report> Reports { get; set; }

实体框架已生成连接表(FileRequestReports),并且级联删除始终适用于连接表条目。 我想要发生的是删除文件请求删除关联的报告,但删除报告不删除关联的文件请求。应始终删除关联的连接表条目。

注意:ManyToManyCascadeDeleteConvention已启用。

使用EF和级联删除是否有相对简单的方法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为实现这一目标的唯一方法是创建一个表示多对多关系的类。像这样:

public class ReportFileRequest
{
    public int ReportId { get; set; }

    public int FileRequestId { get; set;}

    public virtual Report Report { get; set;}

    public virtual FileRequest FileRequest { get; set; }
}

您必须更新Report

public virtual ICollection<ReportFileRequest> ReportFileRequests { get; set; }

FileRequest

public virtual ICollection<ReportFileRequest> ReportFileRequests { get; set; }

映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ReportFileRequest>()
        .HasKey(i => new { i.ReportId, i.FileRequestId });

    model.Entity<ReportFileRequest>()
       .HasRequired(i => i.Report)
       .WithMany(i => i.ReportFileRequests)
       .WithForeignKey(i => i.ReportId)
       .WillCascadeOnDelete(true);

    model.Entity<ReportFileRequest>()
       .HasRequired(i => i.FileRequest)
       .WithMany(i => i.ReportFileRequests)
       .WithForeignKey(i => i.FileRequestId)
       .WillCascadeOnDelete(false);

}
相关问题