Ответ 1
Если вы хотите создать много-много отношений с дополнительными данными в таблице объединений, вы должны сделать таблицу ассоциации как сущность. Чистые отношения "многие-многие" относятся только к чистой таблице с идентификатором сущности.
В вашем случае это будет:
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 многие-многие отношения с дополнительной информацией
Сначала создайте код, многие для многих, с дополнительными полями в таблице ассоциации