У меня есть следующий метод вставки:
public static bool Insert<T>(T item) where T : class
{
using (ApplicationDbContext ctx = new ApplicationDbContext())
{
try
{
ctx.Set<T>().Add(item);
ctx.SaveChanges();
return true;
}
catch (Exception ex)
{
// ...
}
}
}
Это работает, как и ожидалось, но когда я хочу вставить новую сущность, которая имеет отношение к существующей сущности, EF повторно вставляет эту реляционную (уже существующую) сущность снова вместе с новой сущностью.
подробности:
У меня есть объект Поставщик , который уже существует в моей базе данных.
Я хочу вставить новую сущность Продукт , которая имеет эту существующую сущность Поставщика как отношение, поэтому я извлекаю этого Поставщика из базы данных и добавляю его в эту сущность Продукта. Когда я вставляю его, используя универсальный метод, он повторно вставляет этого поставщика, и, очевидно, я не хочу такого поведения.
Я что-то здесь не так делаю или это сделано специально, и не должен ли я использовать универсальную функцию вставки, когда реляционные сущности присоединены к моим новым сущностям?
Спасибо за любые предложения или информацию!
С уважением
EDIT:
Product Entity:
// ... non relational properties
public ICollection<Price> Prices { get; set; }
public ICollection<Supplier> Suppliers { get; set; }
public ICollection<Productnumber> ProductNumbers { get; set; }
Цена объекта:
public Product Product { get; set; }
public Supplier Supplier { get; set; }
Поставщик:
public ICollection<Productnumber> ProductNumbers { get; set; }
public ICollection<Product> Products { get; set; }
public ICollection<Price> Prices { get; set; }
ProductNumber Entity:
public Supplier Supplier { get; set; }
public Product Product { get; set; }
Как мне перейти к вставке нового продукта? Возможно ли это с такой структурой и использованием универсальной вставки?