Entity Framework Core: добавление новой записи в таблицу «соединения» удаляет существующие записи - PullRequest
0 голосов
/ 20 мая 2018

Некоторый код удален для краткости.

Я создал веб-сайт ASP.NET Core MVC, используя Entity Framework Core.

У меня есть три таблицы для Parts, Distributors и DistributorParts (объединение таблиц).На моем сайте есть страница для добавления Distributors к Part.Когда я создаю новую запись DistributorPart для Распределитель 1 и Часть 1 , запись вставляется правильно.Но когда я добавляю вторую DistributorPart запись для Distributor 2 и Part 1 , первая DistributorPart запись удаляется!(обратите внимание, что две вышеупомянутые DistributorPart записи обе используют Часть 1 )

Мои вопросы:

  • Как я могу получить новые DistributorPart записибыть вставленным без удаления / затрагивания существующих записей?
  • Что я делаю не так?

Модели:

public class Part
{
    [key]
    public int Id { get; set; }

    public string Description { get; set; }

    public ICollection<DistributorPart> DistributorParts { get; set; }
}

public class Distributor
{
    [key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public ICollection<DistributorPart> DistributorParts { get; set; }
}

public class DistributorPart
{
    [key]
    public int Id { get; set; }

    public int OnHand { get; set; }

    public int OnOrder { get; set; }

    public int PartId { get; set; }

    public Part Part { get; set; }

    public int DistributorId { get; set; }

    public Distributor Distributor { get; set; }
}

Вот мой DbContext:

public class MyContext : DbContext
{
    public DbSet<Part> Parts { get; set; }

    public DbSet<Distributor> Distributors { get; set; }

    public DbSet<DistributorPart> DistributorParts { get; set; }

    public MyContext(DbContextOptions<MyContext> options) 
        : base(options) 
    { }
}

Вот код, который вставляет новую DistributorPart запись:

public DistributorPart AddDistributorPart(DistributorPart distributorPart)
{
    var newDistributorPart = new DistributorPart
    {
        OnHand = distributorPart.OnHand,
        OnOrder = distributorPart.OnOrder,
        PartId = distributorPart.PartId,
        DistributorId = distributorPart.DistributorId
    };

    _context.Add(newDistributorPart);
    _context.SaveChanges();

    return newDistributorPart;
}

Я могу проверить это в окне «Вывод приложения» при отладке:

Microsoft.EntityFrameworkCore.Database.Command: Информация: Выполнено DbCommand (1ms) [Parameters = [@ p0= '?', @ p1 = '?', @ p2 = '?'], CommandType = 'Text', CommandTimeout = '30 '] УДАЛИТЬ ИЗ "DistributorParts" ГДЕ "Id" = @ p0;...

РЕДАКТИРОВАНИЕ:

Вот мой метод Controller, который вызывает метод AddDistributorPart ():

public DistributorPart AddDistributorToPart([FromBody] DistributorPart distributorPart)
{
    var part = _partService.GetPart(distributorPart.PartId);
    if (part == null || part.Id <= 0)
    {
        throw new Exception($"Part Id of {distributorPart.PartId} does not exist.");
    }

    var distributor = _distributorService.GetDistributor(distributorPart.DistributorId);
    if (distributor == null || distributor.Id <= 0)
    {
        throw new Exception($"Distributor Id of {distributorPart.DistributorId} does not exist.");
    }

    var userId = GetUserId();
    var newDistributorPart = _distributorPartService.AddDistributorPart(distributorPart, userId);

    ...

    return newDistributorPart;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...