Mam określone zapytanie w moim kodzie, które musi być chętny do ładowania wszystkich powiązanych podmiotów (zarówno -> 1 FKs i -> N FKs), ponieważ kontekst zostanie usunięty zaraz po tym .EF Code First: Include nie działa na opcjonalny związek
Wykonałem ogólną metodę "zapytania", która trwa params Expression<Func<MyItem, object>>[] includes
, a następnie wewnętrznie je łączy. Ta część działa dobrze.
Kwerenda wygląda następująco:
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
Mapowanie dla nieruchomości nie działa (umieszczonym w konfiguracji SubChildNotWorking):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Ze wszystkich obejmuje tylko SubChildNotWorking
robi” t rzeczywiście działa. Podczas sprawdzania za pomocą debuggera zwróconego obiektu widzę serwery proxy we wszystkich właściwościach. Otwarcie serwerów proxy daje mi poprawne dane dla wszystkich innych relacji, a "Obiekt kontekstu został już usunięty wyjątek" dla właściwości SubChildNotWorking
.
Jedyną różnicą, jaką udało mi się zauważyć, jest to, że SubChildNotWorking
jest zerowalną wartością FK (z kolumną zerowalną w konfiguracji DB i WithOptional w strukturze dbcontext), podczas gdy wszystkie pozostałe są nieopróżnialnymi wartościami FK skonfigurowanymi za pomocą opcji WithRequired.
Baza danych jest również starszym DB nie utworzonym przy użyciu Code First i nieprzestrzegającym jego konwencji. Właśnie dokonałem mapowania w DbContext. Wszystko inne działa dobrze.
Próbuję dowiedzieć się, czy chętne ładowanie nie działa na NFK, ale nie mogłem znaleźć żadnej dokumentacji na ten temat.
Czy to błąd, czy zamierzone zachowanie? Ale przede wszystkim, jak mam to rozwiązać?
Dzięki.
Co się stanie, jeśli to tylko 'SubChildNotWorking' bez drugiego subchildren? Czy to działa? – Slauma
Nie. To też nie działa. –
Czy możesz sprawdzić, czy SQL wygląda poprawnie (z 'var sql = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking)). ToString();') i przetestuj zapytanie ręcznie w SSMS, jeśli zwraca oczekiwane wyniki wierszy. –
Slauma