2011-06-23 3 views

Odpowiedz

2

Twoje jednostki są odłączane po usunięciu kontekstu. Zobacz następujący wpis:

Entity Framework Multiple Object Contexts

+1

http://stackoverflow.com/questions/2244843/entity-framework-detaching-entities-when-objectcontext-disposed sugeruje, że musisz odłączyć? Czy to nie jest poprawne? – glosrob

5

No nie trzeba zadzwonić odłączyć na swoich jednostkach. Jeśli jednak zrobić coś takiego:

var people = Context.Person.Where(p => p.FirstName == "John"); 

a następnie wyrzucać kontekście, ludzie będą wyrzucać wyjątek, ponieważ IEnumerable wstrzymuje wykonanie. W ten sposób:

var people = Context.Person.Where(p => p.FirstName == "John").ToList(); 

pozwoli Ci nadal korzystać z listy osób.

Ponadto

var john = Context.Person.FirstOrDefault(p => p.Id == 342); 

będzie działać po kontekście jest umieszczona, bo już pobrane konkretny podmiot, a nie wyliczenie.

7

Być może zależy to od znaczenia Detach. Dołączony byt oznacza, że ​​kontekst wie o encji i śledzi jej zmiany. Jeśli pozbędziesz się kontekstu, nie będzie on już mógł śledzić zmian, a obiekt jest odwrócony. Podobno ma tutaj prawdziwe znaczenie.

Jeśli używasz dynamicznych serwerów proxy (POCO - dynamiczne śledzenie zmian lub leniwy ładunek), serwer proxy przechowuje wewnętrznie zwrotne odniesienie do kontekstu, ale nie reaguje na usuwanie kontekstu. Nadal utrzymuje odniesienie (przy okazji może to być źródłem nieprzyjemnych wycieków pamięci). Powoduje to problem w dwóch sytuacjach:

  • Przy próbie dołączenia takiego obiektu do innego kontekstu spowoduje to pewien wyjątek, że obiekt może być śledzony tylko przez pojedynczy kontekst (pomimo faktu, że oryginalny kontekst jest już martwy).
  • Przy próbie dostępu do właściwości nawigacji, która nie była zbytnio obciążona, otrzymasz ObjectDisposedException, ponieważ proxy uruchomi leniwy ładunek w usuniętym kontekście.

Jedynym sposobem na uniknięcie tego jest wyłączenie dynamicznych serwerów proxy lub ręczne odłączenie obiektu przed wyrzuceniem kontekstu. Ma to inną wadę - odłączający się podmiot zrywa relacje.

Powiązane problemy