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

Odpowiedz Nowy wątek
2019-01-12 17:24
Trzeźwy Pomidor
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

Pozostało 580 znaków

2019-01-12 20:10
0

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

Ale on tam nie tworzy nowego produktu, tylko obiekt z ID. - somekind 2019-01-14 02:25

Pozostało 580 znaków

2019-01-12 20:27
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.

edytowany 1x, ostatnio: mad_penguin, 2019-01-12 20:27
No jak dla mnie, to odpowiedź @mad_penguin ma więcej sensu. - somekind 2019-01-14 02:25

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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