Dlaczego nie da się zrobić czegoś takiego w EF Core?

0

hej

Mam ci ja banalną relację w EF Core:

public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    public class ProductOrder
    {
        public int OrderId { get; set; }
        public Product Product { get; set; }
    }

Wydawało mi się, że podczas tworzenia encji ProductOrder mogę zrobić to tak:

ProductOrder productOrder = new ProductOrder { Product = new Product { Id = productId } };
await repository.AddAsync(productOrder):

Niestety, taki kod konczy sie wyjątkiem, który mówi mniej więcej o tym, że nie jest możliwe ręczne ustawianie wartości, które są automatycznie przypisane przez bazę - Id(PK) dla encji Product. Dlatego obiekty ProductOrder muszę tworzyć tak:

ProductOrder productOrder = new ProductOrder();
productOrder.Product = repository.GetProductById(productId);
await repository.AddAsync(productOrder);

Dlaczego EF nie może sam zaciągnąć obiektu Product do property Product encji ProductOrder skoro posiada jej PK i ta istnieje w bazie? Pobieranie calego produktu z bazy i wrzucanie go do ProductOrder ręcznie za każdym razem jest uciążliwe

0

Cos pokreciles. Tworzysz nowy productOrder i dla niego tworzysz nowy produkt? Produkt powinien istniec juz wczesniej skoro go diodajesz do ProductOrder.

0

Niestety tak działa EF, najprostszym rozwiązaniem będzie dodanie do ProductOrder właściwości ProductId będącej kluczem obcym dla Product i jej przypisywanie zamiast całego produktu.

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