2011-07-01 13 views
8

Czy struktura encji zwraca to samo odwołanie do obiektu, jeśli przeszukuję logicznie (w bazie danych) ten sam obiekt z różnych miejsc.Czy odwołania do obiektu ramowego jednostki są takie same dla obiektów bazy danych?

Na przykład, zapytał klienta o nazwie Joe Black, (a zakładamy, teraz wiem, że istnieje tylko jeden Joe Blacka w bazie danych). Customer c = select ... blabla where ... Name == Joe Black...; i gdzieś w kodzie, zapytaliśmy Customer c2 = select... where.. ID==5 gdzie 5 jest ID Joe Black. Wiem, że w bazie danych mapują one do tego samego obiektu, ale czy mapują również do tego samego obiektu na poziomie kodu? Więc czy c1 jest równe c2? Mam listy do scalenia i sprawdzenia logicznej równości obiektów (na razie nie mam dostępu do bazy danych) i zastanawiałem się, czy obiekty Entity Framework będą z nią ładnie grały, czy powinienem napisać niestandardowe klasy porównywania.

Odpowiedz

13

W przypadku większości ORM, w tym Entity Framework i NHibernate, należy użyć Identity Map Pattern, aby upewnić się, że istnieje tylko jedna instancja danej jednostki na klucz podstawowy. Mapa tożsamości jest określana przez kontekst, więc dwa różne konteksty stworzą dwa obiekty, które odnoszą się do tej samej jednostki. Dobrą praktyką jest, aby jednostki implementowały IEquatable, w tym przesłonięcia dla operatorów równości, tak aby działało "==" lub "! =". Jest to bardziej zaangażowane niż to, co mogłoby się wydawać. Zobacz przykład here.

+0

To odpowiada na pytanie, dziękuję. Oznacza to, że moja praca jest łatwiejsza, ale nie wiem, jak dodać metody implementacji lub przeciążać operatorów dla Entity Framework - automatycznie generowanych klas. W każdym razie, dostałem dostęp do mojego DB znowu i to pracowało. Więc EF również to obsługuje. –

Powiązane problemy