Некоторый код удален для краткости.
Я создал веб-сайт 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;
}