2012-06-19 12 views
6

Przeczytałem artykuły several i questions o koncepcji klucza obcego vs niezależnej relacji podczas korzystania z Entity Framework. I nadal nie jestem w 100% pewien, w którą stronę pójść ... Wolałbym nie "zanieczyszczać" moich POCO w mojej domenie przez posiadanie właściwości, która będzie używana w relacji FK, gdy mam już odwołanie do właściwości "ma "obiekt.Klucz obcy kontra relacje międzyludzkie - czy istnieje ulepszenie z Entity Framework 5?

Moje pytania są tam (patrząc na ciebie @EFTeam, @Ladislav Mrnka)

  1. są jakieś ulepszenia na ten temat w nadchodzącym Podmiot ramowego v5?
  2. Czy są więcej korzyści, jeśli używam FK zamiast niezależnych skojarzeń (szczególnie z kodem jako pierwszym)?

Odpowiedz

5

Jeśli masz duży model, jesteś w stanie "zanieczyścić" obiekty domeny (lub ogólnie model koncepcyjny). W przypadku modeli ze skojarzeniami odwzorowanymi w FK, koszt "generowania widoku" - etap w potokowym przetwarzaniu EF, niezbędny do wykonywania zapytań lub zapisywania zmian, który można przenieść do czasu budowania ("wstępne generowanie widoków") - jest niższy w porównaniu do modeli z niezależnymi skojarzeniami. Jest to ważne, ponieważ ilość czasu na jego wykonanie może być niezauważalna dla małych modeli, ale staje się bardzo szybka, szczególnie gdy istnieją asocjacje odwzorowane na zerowe klucze obce (do -0.1 lub do-1 z jednostkami pochodnymi w hierarchiach odwzorowanych TPH). W oficjalnej wersji EF5 performance considerations document przykładowa różnica w czasie generowania widoku dla bardzo dużego modelu jest podawana między "ponad miesiącem, a następnie poddaliśmy się" (z niezależnymi skojarzeniami) i 104 minutom (z powiązaniami odwzorowanymi FK). W moim przypadku (kilkaset bardzo połączonych podmiotów) wynosi od 25 minut do 40 sekund. Sytuacja jest taka sama w EF5, jak w poprzednich wersjach.

+0

Mam również bardzo duży model (ponad 75 podmiotów). Wygląda na to, że zalecane jest użycie relacji FK? – zam6ak

+0

Jeśli nie widzisz jeszcze problemów z wydajnością (szczególnie długie oczekiwanie na pierwsze '.SaveChanges' i niewielkie opóźnienie przy pierwszym wyszukiwaniu dostępu do danego zestawu encji) nie musisz używać FK, jeśli lubisz czystsze niezależne asocjacje kodu daj więcej. – cynic

2

Brak ulepszeń. Obie opcje nadal istnieją. Zaletą korzystania z powiązania FK jest uproszczenie obsługi zmian relacji jeden-do-wielu podczas pracy z rozłączonymi wykresami obiektów. Powinien także uprościć wiązanie danych, jeśli z niego korzystasz.

+1

Wygląda na to, że relacje FK zapewniają więcej korzyści kosztem "zanieczyszczenia" domen POCO ... Czy możesz rozwinąć "Powinno to również uprościć wiązanie danych, jeśli z niego korzystasz." Co przez to rozumiesz - czy istnieje przykład (jestem "wzrokową" osobą)? Dzięki – zam6ak

Powiązane problemy