2010-10-13 11 views
11

Próbujemy zdecydować, czy warto użyć struktury encji 4 w projekcie. W tym celu myślę, że dobrym początkiem byłoby porównanie go z nhibernate, który jest dojrzały i sprawdzony przez lata użytkowania, aby mieć wszystkie funkcje potrzebne ludziom do zastosowań biznesowych i dowiedzieć się, jakie funkcje nHibernate ma brak EF4 dalej.Co ma nhibernate, brakuje tej struktury encji 4?

Więc na początek, moją ograniczoną wiedzę:

  • buforowanie: nhib posiada pamięć podręczną L2, natomiast EF4 ma słabą buforowanie
  • nHibernate ma dla większości dostawców DB, natomiast EF potrzebuje dodatków dla non- (?) SQL DB
  • nHib jest szybsze/bardziej zoptymalizowany
  • nHib posiada punkty rozszerzenia (np niestandardowe typy pól)
  • ... co jeszcze?

Znaleziono kilka artykułów:

http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases-Part2.aspx

+0

Osobiście uważam, że elastyczność i rozszerzalność NHibernate sprawia, że ​​jest to produkt najwyższej jakości. Wygląda na to, że możesz skłonić NH, by zrobił dla ciebie więcej niż EF. Tylko moje 2c ... Aren

+0

Aren, nie trzeba być nieśmiałym, to jest całkowicie poprawna rzecz do dodania do listy! – Chris

+2

To powinno być prawdopodobnie CWiki, ponieważ jest subiektywne (dla fanów EF i fanów NHibernate). I najprawdopodobniej wybuchnie w argument "co jest lepsze". – RPM1984

Odpowiedz

1

Używam Entity Framework w aplikacji pulpitu, a ja jestem bardzo zadowolony z niego, jest wada z użyciem obiektów DateTime - nie można uzyskać dostępu do właściwości, co najważniejsze, doWłaściwość.

Nie można również używać obcych obiektów Entity Framework (tj. Obiektów spoza kontekstu Entity Framework, takich jak mapowanie Journal do JournalDto) w zapytaniach LINQ, tj. podczas mapowania - musisz najpierw wykonać zapytanie z ToList() i wykonać wtedy mapowanie.

Jeśli chodzi o narzędzia EF będące wadliwe - nic nie zauważyłem, ale prawdopodobnie po prostu podrapałem powierzchnię ramy.

+0

Oświadczenie 2 nie jest poprawne, możesz użyć właściwości nawigacyjnych, aby pobrać obiekty "obcego klucza" bezpośrednio w zapytaniach, LUB możesz wyraźnie zrobić sprzężenia. Dodatkowo możesz użyć szybkiego ładowania (.Include), aby eksponować ładunki obiektów (jeśli wyłączyłeś leniwe ładowanie). – RPM1984

+0

To dość dziwne w odniesieniu do datetimes! Co dzieje się, gdy próbujesz uzyskać dostęp do nieruchomości? Nie widzę, jak datetime może działać tylko "na pół", biorąc pod uwagę, że jest to typ pierwotny. – Chris

+0

RPM: czytasz zdanie z niewłaściwą intonacją. Mam nadzieję, że moja redakcja to wyjaśni. Nie miałem na myśli obcego kluczowego związku. – Femaref

3

NHibernate obsługuje inne bazy danych poza SQL Server, np. jeśli używasz Oracle. Sam Entity Framework jest przeznaczony do obsługi wielu dostawców, ale jedynym wbudowanym dostawcą jest SQL Server. Firma Oracle nie wydała jeszcze żadnego dostawcy, a istnieją komercyjne lub niejednolite bezpłatne dostawcy dla innych baz danych. Więc jeśli obsługa wielu DB jest w zasięgu, to NHibernate wyprzedza EF 4 w tym momencie.

+0

Dzięki za to. Dodam go do listy. Nie stanowi to dla nas problemu, ponieważ korzystamy wyłącznie z serwerów sql. – Chris

2

Chociaż nie mam dużego doświadczenia z EF, jednym z największych punktów sprzedaży NHibernate są jego punkty rozszerzenia. User Types i Event Listeners to świetne przykłady tego, jak można dostosować wszystkie aspekty doświadczenia NHibernate.

+0

Pozdrawiam, to dobrze wiedzieć – Chris

5

Próbowałem struktury encji, kiedy po raz pierwszy pojawił się i stwierdziłem, że konfiguracja jest zbyt skomplikowana, gdy robimy coś, co nie jest standardowe (z jakąkolwiek aplikacją z prawdziwego życia, rzeczy nie są tak doskonałe, jak w przykładach). Z nhibernate, złożoności były dość łatwo rozwiązane w bardzo czytelnych plikach mapujących. Pliki mapowania struktury Entity nie były prawie tak czytelne.

+0

Wiesz, to było dokładnie moje doświadczenie. Jeśli przekroczysz ich wąskie granice spodziewanych sposobów robienia rzeczy, naprawdę trafisz w ściany komplikacji. – Chris

Powiązane problemy