EF Core próbuje wrzucić ponownie (istniejącą już) encją powiązaną z główną encją

0

Witam.
Mam dziwny problem. Mam encję produkt, którą próbuję dodać, jednak posiada ona relację z użytkownikiem, który już istnieje.
Więc przy próbie dodania produktu, który ma być przypisany do istniejącego już użytkownika rzuca błędem: Violation of PRIMARY KEY constraint.

using reservation_system.Domain.Core.Entity;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;

namespace reservation_system.Catalog.Data.Models
{
    public class Product : BaseEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public ICollection<CategoryProduct> CategoryProducts { get; set; }
        public string Name { get; set; }
        public string ImagePath { get; set; }
        public string Description { get; set; }
        public double Price { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime? DeactivetedAt { get; set; }
        public User Owner { get; set; }
        public uint MaxRentalPerDay { get; set; }
        public uint MinHoursBreakBetweenRentals { get; set; }
    }
}

using reservation_system.Domain.Core.Entity;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;

namespace reservation_system.Catalog.Data.Models
{
    public class User : BaseEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public ICollection<Product> Products { get; set; }
    }
}

Błąd sugeruje, że entity próuje wrzucic ponownie encję użytkownika, zamiast po prostu stworzyć powiązanie, zastanawiam się jak tego uniknąć.

0

Pokaż pełny kod przypisywania oraz zapisu do bazy

3

Dawno nie miałem do czynienia z EF, ale w jaki sposób przypisujesz usera do produktu?

Jeśli robisz new User { Id = "<guid>" }, to EF chyba uznaje że chcesz stworzyć nowego usera.
Masz kilka wyjść:

  • pobrać usera z bazy i ten obiekt przypisać w produkcie (EF będzie wtedy wiedział, że taki user już istnieje)
  • stworzyć usera tak jak pokazałem wyżej, ale przed zapisem zrobić na kontekście Attach(user)
  • dodać właściwość UserId w produkcie i przypisywać sam id, a nie cały obiekt usera

1 użytkowników online, w tym zalogowanych: 0, gości: 1