Составной первичный ключ в таблице БД для связи many-to-many
В процессе изучения подхода CodeFirst в EF столкнулся с проблемой. Итак я хочу добавить в поле BoardGameOrder поле Quantity, которое будет отвечать за количество приобретенных товаров, но EF не дает создать миграцию если я пытаюсь создать таблицу без PK. А можно ли вообще сделать это, если да, то с помощью чего? На изображении ниже желаемый результат, поле Quantity в таблицу BoardGameOrder было добавлено путем добавления в субд. Заранее благодарю за ответы!
Блок кода модели BoardGame
public class BoardGame
{
public int Id { get; set; }
public string Title { get; set; }
public decimal Cost { get; set; }
public int MinPlayers { get; set; }
public int MaxPlayers { get; set; }
public Studio Studio { get; set; }
public ICollection<Genre> Genres { get; set; }
public ICollection<Order> BoardGames { get; set; }
public BoardGame()
{
Genres = new List<Genre>();
BoardGames = new List<Order>();
}
}
Блок кода модели Order
public class Order
{
public int Id { get; set; }
public string Status { get; set; }
public ICollection<BoardGame> Orders { get; set; }
public Order()
{
Orders = new List<BoardGame>();
}
}
Ответы (1 шт):
Автор решения: Arkadiy
→ Ссылка
Помог комментарий с ссылкой отправленный Alexander Petrov, выражаю огромную благодарность.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BoardGame>()
.HasMany(p => p.Orders)
.WithMany(p => p.BoardGames)
.UsingEntity<BoardGameOrder>(
j => j
.HasOne(pt => pt.Order)
.WithMany(t => t.BoardGameOrders)
.HasForeignKey(pt => pt.OrderId),
j => j
.HasOne(pt => pt.BoardGame)
.WithMany(p => p.BoardGameOrders)
.HasForeignKey(pt => pt.BoardGameId),
j =>
{
j.Property(pt => pt.Quantity).HasDefaultValue(1);
j.HasKey(t => new { t.BoardGameId, t.OrderId });
});
}
public class BoardGameOrder
{
public int BoardGameId { get; set; }
public BoardGame BoardGame { get; set; }
public int OrderId { get; set; }
public Order Order { get; set; }
public int Quantity { get; set; }
}

