我有2个实体,EF不删除记录流利的API - 多对多的关系
- 新闻
- FileAttachment的
我想利用二维码的第一流利的API,因此配置每个新闻可以有0,1个或多个附件。
这里是我现在使用
public NewsMap()
{
this.ToTable("News"); // Table Name
this.HasKey(m => m.Id); // Primary Key
// Field Definition
this.Property(m => m.Title).HasMaxLength(255).IsRequired();
this.Property(m => m.Body).HasColumnType("Text").IsRequired();
this.Property(m => m.Summary).HasMaxLength(1000).IsRequired();
this.Property(m => m.AuthorId).IsRequired();
this.Property(m => m.CreatedOn).IsRequired();
this.Property(m => m.UpdatedOn).IsRequired();
this.HasMany(m => m.Attachments).WithMany().Map(m => m.MapLeftKey("NewsId").MapRightKey("AttachmentId"));
}
public class FileAttachmentMap : EntityTypeConfiguration<FileAttachment>
{
public FileAttachmentMap()
{
this.ToTable("FileAttachments"); // Table Name
this.HasKey(m => m.Id); // Primary Key
// Field Definition
this.Property(m => m.DisplayName).HasMaxLength(256).IsRequired();
this.Property(m => m.PhysicalFileName).HasMaxLength(256).IsRequired();
this.Property(m => m.Extension).HasMaxLength(50).IsRequired();
this.Property(m => m.IsImage).IsRequired();
this.Property(m => m.ThumbTiny).HasMaxLength(275).IsOptional();
this.Property(m => m.ThumbSmall).HasMaxLength(275).IsOptional();
this.Property(m => m.ThumbMid).HasMaxLength(275).IsOptional();
this.Property(m => m.ByteSize).IsRequired();
this.Property(m => m.StorageType).IsRequired();
this.Property(m => m.CreatedOn).IsRequired();
this.Property(m => m.UpdatedOn).IsRequired();
}
}
这种映射正确生成名为NewsFileAttachment两个字段中间表的内容:
- NewSID的
- 附件ID
当我打电话给News.Attachments.Add(附件);它正确添加附件& NewsAttachment表中的记录。
当我从News.Attachments中删除某些列表项时,它正确地从NewsAttachment表中删除记录,但它不会删除FileAttachment表中的记录。我也想删除它。
有人可以请建议一个更好的Fluent API配置来实现这一目标吗?
感谢, 阿米特
编辑
在各种目的,我的情况FileAttachment的存储文件。我有博客实体,也有附件。所以,两个中间表BlogAttachments & FileAttachments。现在,如果我使用WithOptional作为(我不能使用WithRequired,因为我需要BlogId & NewsId在FileAttachment表中),我可以摆脱中间表,但仍然删除不从FileAttachment表删除记录,它只是使NewsId/BlogId NULL。
有什么建议吗?主要的是我不想与FileAttachment表中的所有字段创建单独的表。
嘿,谢谢你的回应。我的问题是,当我从新闻中删除与附件的关系时,仍然可以保留中间表并仍然删除附件?我知道它在技术上可能是不正确的,但根据我的架构,我知道单个附件记录将通过中间表与唯一的一个实体关联。 如果这是不可能的,你可以建议没有中间表的任何其他配置,从附件表中删除记录? –
嗨艾米特 - **不可能** - 对于我所知道并见过的所有人。看看我的编辑做什么 - 这是唯一的方法 - 我认为它“符合”你想要的。 – NSGaga
谢谢@NSGaga,在我的情况FileAttachment存储文件为各种目的。我有博客实体,也有附件。两个中间表BlogAttachments&FileAttachments。 现在,如果我使用WithOptional,因为你建议(我不能使用WithRequired),因为我需要FileIttachment表中的BlogId和NewsId),我可以摆脱中间表,但仍然不删除记录从FileAttachment表,它只是使NewsId/BlogId NULL。任何建议? 主要的是我不想与FileAttachment表中的所有字段创建单独的表。 –