[英]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.