Добавление записи в таблицу через 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 шт):

Автор решения: Alexander Petrov

Судя по вашему описанию, текущий код выглядит примерно так:

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();
→ Ссылка