Я пытаюсь настроить отношения многие ко многим, используя EF Core и ASP.NET Core 2.1, и на данный момент я не могу заставить это работать, и, похоже, я тоже не понимаю логику, стоящую за этим.
Поэтому я настроил отношения многие ко многим, используя ModelBuilder, например:
builder.Entity<ComponentWare>().HasKey(cw => new { cw.ComponentId, cw.WareId });
builder.Entity<ComponentWare>()
.HasOne(x => x.Component)
.WithMany(x => x.ComponentWares)
.HasForeignKey(x => x.ComponentId);
builder.Entity<ComponentWare>()
.HasOne(x => x.Ware)
.WithMany(x => x.ComponentWares)
.HasForeignKey(x => x.WareId);
base.OnModelCreating(builder);
Мои модели сущностей:
public class Component
{
public int ComponentId { get; set; }
public string Number { get; set; }
public string Name { get; set; }
public string MaterialType { get; set; }
public decimal? Cost { get; set; }
public float? Weight { get; set; }
public sbyte ComponentType { get; set; }
public sbyte SourceType { get; set; }
public string Comment { get; set; }
public string Author { get; set; }
public string AddedBy { get; set; }
public DateTime? ModifiedDate { get; set; }
public virtual ICollection<BookComponent> BookComponents { get; set; }
public virtual ICollection<ComponentWare> ComponentWares { get; set; }
}
public class Ware
{
public int WareId { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public decimal? Quantity { get; set; }
public string Unit { get; set; }
public decimal? Converter { get; set; }
public DateTime? Date { get; set; }
public virtual ICollection<ComponentWare> ComponentWares { get; set; }
}
И моя таблица соединения:
public class ComponentWare
{
public int ComponentId { get; set; }
public Component Component { get; set; }
public int WareId { get; set; }
public Ware Ware { get; set; }
public int Quantity { get; set; }
public float Length { get; set; }
public string Unit { get; set; }
}
Теперь я хочу установить отношения «многие ко многим» между таблицами Ware и Component, чтобы в итоге моя таблица соединения выглядела следующим образом.
Tables: WareId | ComponentId | ComponentWares |
1 | 1 | ComponentId | WareId |
2 | 2 | 1 | 1 |
| 1 | 1 |
| 2 | 1 |
| 2 | 1 |
У многих компонентов может быть много изделий (также дублированных) ии наоборот.
Я попытался вручную добавить записи с помощью проводника SQL Server, но, похоже, я не могу добавить несколько ComponentId и WareId с одинаковыми значениями из-за прочитанного
HasKey(cw => new { cw.ComponentId, cw.WareId })
.что строка выше необходима для связи многих со многими в EF Core, но, насколько я понимаю, она отрицает идею отношения многих ко многим ...
Должен ли я удалить ComponentId cw.WareId ключ от ModelBuilder и добавление Id в таблицу соединений или это другое решение для этого?