我有两个实体:Reports和FileRequests。这些之间存在多对多的关系。
所以Report.cs有
public virtual ICollection<FileRequest> FileRequests { get; set; }
FileRequest.cs有
public ICollection<Report> Reports { get; set; }
实体框架已生成连接表(FileRequestReports),并且级联删除始终适用于连接表条目。 我想要发生的是删除文件请求删除关联的报告,但删除报告不删除关联的文件请求。应始终删除关联的连接表条目。
注意:ManyToManyCascadeDeleteConvention已启用。
使用EF和级联删除是否有相对简单的方法?
提前致谢。
答案 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);
}