Добавление записи в таблицу через Entity добавляет запись в связанную таблицу
Есть класс
public class DbItem
{
public int Id { get; set; }
public Products Product { get; set; }
}
где класс Products - это таблица в БД
При добавлении новой DbItem в БД , происходит попытка добавления Products в соответствующую таблицу в БД. Но добавления не просходит и выскакивает ошибка, что элемент с таким ключом уже существует.
Мне нужно добавить новый элемент только в таблицу DbItem
Сам Products Product беру из БД как AsNoTracking()
Как обновлять и добавлять элемента только в таблицу DbItem ?
Class Products
[Table("Products")]
public class Products
{
[Key]
public int Id { get; set; }
[Display(Name = "Name")]
[Required(ErrorMessage = "Введите название")]
public string ProductName { get; set; }
[BindProperty]
[Display(Name = "Category")]
[Required(ErrorMessage = "Не выбрана категория")]
public int Category { get; set; }
[NotMapped]
public string CategoryName { get; set; }
}
Update
var product = _context.Product.AsNoTracking().Where(x=>x.ProductId == Id).FirstOrDefault();
var dbitem = new Dbitem{Id = 1, Product = product};
_context.Dbitem.Add(dbitem);
_context.SaveChanges();
Ответы (1 шт):
Судя по вашему описанию, текущий код выглядит примерно так:
var product = context.Products.AsNoTracking().First();
var dbItem = new DbItem { Product = product };
context.DbItems.Add(dbItem);
context.SaveChanges();
Да, в этом случае возникнет исключение, т. к. сущность product не отслеживается контекстом.
Чтобы добавление прошло успешно, нужно либо убрать AsNoTracking(), либо присоединить сущность к контексту, тогда она станет отслеживаться.
context.Attach(product);
context.SaveChanges();