2015-06-01 8 views
10

Mam problemy z wczytaniem odwołania do obiektu nadrzędnego w Entity Framework 4. Z powodu Lazy Loading odwołanie do obiektu nadrzędnego (Condition) nie zostało załadowane do obiektu potomnego (DiscountLevel), więc staram się załadować go z:Entity Framework 4 Ładowanie wyjątku odniesienia

if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load(); 

Ale to rzuca następujący wyjątek:

odniesienie jednostka nie może być załadowany, ponieważ nie jest dołączony do objectcontext

Więc jeśli próbuję dołączyć istniejącego obiektu podrzędnego (DiscountLevel) do kontekstu Object (a następnie załaduj odniesienie nadrzędny później):

context.AttachTo("tblDiscountLevel", this); 

pojawia się następujący wyjątek:

An obiekt o tym samym kluczu już istnieje w ObjectStateManager. Istniejący obiekt znajduje się w stanie wolnostojącym. Obiekt może zostać dodany do ObjectStateManager tylko wtedy, gdy jest w stanie dodanym.

Czuję, że robię coś złego, ale nie wiem, co. Więc każda pomoc na ten temat jest bardzo doceniana. Daj mi znać, jeśli potrzebujesz dodatkowych informacji!

+0

Czy próbowałeś "Uwzględnić" obiekt nadrzędny w zapytaniu? Zobacz: http://stackoverflow.com/questions/19319116/include-vs-load-performance-in-entityframework – Stefan

+0

Próbowałem w tym rodzic, ale odniesienie nie zostanie załadowany. Może robię coś nie tak ... 'context.tblDiscountLevel.Include (" Condition "). Gdzie (lv => lv.LevelDiscountID == this.LevelDiscountID) .ToList()' –

+0

Czy używasz 'code first' lub edmx? Podczas korzystania z kodu najpierw właściwość nawigacji do rodzica powinna być "wirtualna" i zawierać pewne konwencje nazewnictwa, aby działało po wyjęciu z pudełka. Jeśli używasz edmx, moje doświadczenie nie jest wystarczające, aby ci pomóc. – Stefan

Odpowiedz

1

Natknąłem się na problem i nie musiałem nic robić z powyższym kodem: Istnieje kilka obliczeń w różnych nadpisanych metodach OnChange w DiscountLevel, które zawiodą, jeśli zostaną wywołane zbyt wcześnie - w tym przypadku na początkowe ładowanie z DB. To spowodowało, że obiekt potomny nie został poprawnie zainicjowany - wyglądający tak, jakby nie był załadowany w ogóle z zewnątrz.

Implementacja prostej zmiennej bool, która uniemożliwiła wykonanie metod OnChange przy początkowym obciążeniu, sprawiła, że ​​wszystko działało zgodnie z oczekiwaniami. Być może istnieje bardziej eleganckie rozwiązanie z funkcjami, które oferuje Entity Framework, ale to działało dla mnie.

Powiązane problemy