我有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表中的所有字段創建單獨的表。 –