EF Core Много ко многим Повторяющиеся записи - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь настроить отношения многие ко многим, используя 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 в таблицу соединений или это другое решение для этого?

1 Ответ

0 голосов
/ 05 февраля 2019

Для ожидаемого результата вы должны определить его с отношением «многие ко многим».

Ваша первоначальная проблема вызвана вставкой дуплексного значения в среднюю таблицу.

Вы должны вставитьзаписи ниже до ComponentWares

enter image description here

...