私は2つのエンティティを持っています、
- ニュース
- 添付ファイル
各ニュースに 0、1、または複数の添付ファイルを含めることができるように、コード ファーストの流暢な API を使用して構成したいと考えていました。
ここに私が今使っているものがあります
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();
}
}
このマッピングは、次の 2 つのフィールドを持つ NewsFileAttachment という名前の中間テーブルを正しく生成します。
- ニュースID
- 添付ファイル ID
News.Attachments.Add(Attachment); を呼び出すと、ニュース エンティティで Attachment テーブルと NewsAttachment テーブルの両方にレコードを正しく追加します。
News.Attachments からいくつかのリスト アイテムを削除すると、NewsAttachment テーブルからレコードが正しく削除されますが、FileAttachment テーブルのレコードは削除されません。それも消したかった。
これを実現するためのより良い Fluent API 構成を提案してもらえますか?
ありがとう、アミット
EDIT
私の場合、FileAttachment はさまざまな目的でファイルを保存します。私も添付ファイルを持つブログエンティティを持っています。つまり、BlogAttachments と FileAttachments の 2 つの中間テーブルです。ここで、WithOptional を使用する場合 (FileAttachment テーブルに BlogId と NewsId の両方が必要なため、WithRequired は使用できません)、中間テーブルを取り除くことができますが、削除しても FileAttachment テーブルからレコードは削除されず、NewsId/ を作成するだけです。ブログ ID NULL。
なにか提案を?主なことは、FileAttachment テーブルにあるすべてのフィールドを含む個別のテーブルを作成したくないということです。