Aplikacja, którą obecnie buduję, używa procedur przechowywanych i ręcznie wykonanych modeli klas do reprezentowania obiektów bazy danych. Niektóre osoby zasugerowały użycie Entity Framework i rozważam przejście na to, ponieważ nie jestem tak daleko w projekcie. Mój problem polega na tym, że ludzie, którzy kłócą się o EF, mówią mi tylko dobrą stronę rzeczy, a nie złą stronę :)
Moje główne obawy to:
- Chcemy sprawdzania poprawności po stronie klienta za pomocą DataAnnotations i wygląda na to, że i tak muszę tworzyć modele po stronie klienta, więc nie jestem pewien, czy EF zaoszczędziłby tyle czasu na kodowanie
- Chcielibyśmy, aby klasy były jak najmniejsze podczas przechodzenia przez sieć, i przeczytałem, że używanie EF często zawiera dodatkowe niepotrzebne dane
- Mamy złożoną warstwę bazy danych, która przecina wiele baz danych, i nie jestem pewien, czy EF sobie z tym poradzi. Mamy jedną wspólną bazę danych zawierającą informacje o użytkownikach, kodach statusu, typach itp. Oraz wiele instancji naszych głównych baz danych dla różnych instancji aplikacji. Zapytania SELECT mogą i będą wykonywać zapytania we wszystkich instancjach baz danych, jednak użytkownicy mogą modyfikować tylko obiekty znajdujące się w bazie danych, nad którą aktualnie pracują. Mogą przełączać bazy danych bez ponownego ładowania aplikacji.
- Tryby obiektowe są bardzo złożone i często wiąże się z nimi całkiem sporo połączeń
Argumenty za EF to:
- Konkurencja. Nie musiałbym kodować czeków, aby sprawdzić, czy rekord był aktualizowany przed każdym zapisem
- Generowanie kodu EF może generować dla mnie modele klas cząstkowych i POCO, jednak nie jestem pewien, czy naprawdę zaoszczędziłoby mi to tyle czasu, ponieważ uważam, że nadal będziemy musieli stworzyć modele po stronie klienta do sprawdzania poprawności i niektóre niestandardowe metody analizy.
- Szybkość rozwoju, ponieważ nie musielibyśmy tworzyć procedur przechowywanych CRUD dla każdego obiektu bazy danych
Nasza obecna architektura składa się z usługi WPF, która obsługuje wywołania bazy danych za pomocą sparametryzowanych procedur przechowywanych, obiektów POCO, które przechodzą do / z usługi WCF i klienta WPF, oraz samego klienta stacjonarnego WPF, który przekształca POCO w modele klasowe w celu walidacji i DataBinding.
Więc moje pytanie brzmi: czy EF jest do tego odpowiedni? Czy są jakieś pułapki związane z EF, o których nie wiem?