Kiedy zapisuję jednostkę za pomocą frameworka jednostki, naturalnie zakładałem, że spróbuje tylko zapisać określoną jednostkę. Jednak próbuje również ocalić byty podrzędne tej jednostki. Powoduje to różnego rodzaju problemy z uczciwością. Jak zmusić EF, aby zapisywał tylko jednostkę, którą chcę zapisać, a zatem ignorować wszystkie obiekty podrzędne?
Jeśli ręcznie ustawię właściwości na wartość null, pojawia się błąd „Operacja nie powiodła się: nie można zmienić relacji, ponieważ co najmniej jedna z właściwości klucza obcego nie dopuszcza wartości null”. Jest to wyjątkowo nieproduktywne, ponieważ ustawiłem obiekt podrzędny na null specjalnie, aby EF zostawił go w spokoju.
Dlaczego nie chcę zapisywać / wstawiać obiektów podrzędnych?
Ponieważ jest to omawiane w kółko w komentarzach, podam pewne uzasadnienie, dlaczego chcę, aby moje przedmioty dziecięce zostały pozostawione same.
W aplikacji, którą buduję, model obiektów EF nie jest ładowany z bazy danych, ale używany jako obiekty danych, które wypełniam podczas analizowania pliku płaskiego. W przypadku obiektów podrzędnych wiele z nich odwołuje się do tabel przeglądowych definiujących różne właściwości tabeli nadrzędnej. Na przykład położenie geograficzne jednostki podstawowej.
Ponieważ sam wypełniłem te obiekty, EF zakłada, że są to nowe obiekty i należy je wstawić wraz z obiektem nadrzędnym. Jednak te definicje już istnieją i nie chcę tworzyć duplikatów w bazie danych. Używam obiektu EF tylko do wyszukiwania i wypełniania klucza obcego w mojej głównej encji tabeli.
Nawet w przypadku obiektów podrzędnych, które są prawdziwymi danymi, muszę najpierw zapisać rodzica i uzyskać klucz podstawowy lub EF po prostu robi bałagan. Mam nadzieję, że to daje pewne wyjaśnienie.