繁体   English   中英

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

[英]Entity Framework Many to Many Cascade Delete One Way

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

所以Report.cs有

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

和FileRequest.cs有

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

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

注意:ManyToManyCascadeDeleteConvention已启用。

使用EF和级联删除有一个相对简单的方法吗?

提前致谢。

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

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);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM