関連付けテーブルにデータを追加して多対多の関係を作成する場合は、関連付けテーブルをエンティティとして作成する必要があります。純粋な多対多の関係は、エンティティ ID を持つ純粋なテーブルにのみ存在します。
あなたの場合、それは次のようになります:
public class Media // One entity table
{
public int Id { get; set; }
public string Name { get; set; }
public bool Enabled { get; set; }
public virtual ICollection<ContractMedia> ContractMedias { get; set; }
}
public class Contract // Second entity table
{
public int Id { get; set; }
public string Code { get; set }
public virtual ICollection<ContractMedia> ContractMedias { get; set; }
}
public class ContractMedia // Association table implemented as entity
{
public int MediaId { get; set; }
public int ContractId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public double Price { get; set; }
public virtual Media Media { get; set; }
public virtual Contract Contract { get; set; }
}
モデル/エンティティを作成したら、コンテキストで関係を定義する必要があります。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ContractMedia>()
.HasKey(c => new { c.MediaId, c.ContractId });
modelBuilder.Entity<Contract>()
.HasMany(c => c.ContractMedias)
.WithRequired()
.HasForeignKey(c => c.ContractId);
modelBuilder.Entity<Media>()
.HasMany(c => c.ContractMedias)
.WithRequired()
.HasForeignKey(c => c.MediaId);
}
また、次のリンクも参照できます。 Fluent API Entity Framework CodeFirst の
追加フィールドを使用した多対多マッピング追加情報を使用した多対多の関係関連テーブルの追加フィールドを使用して、最初に多対多のコードを作成する