Taki singleton był dla mnie bardzo wygodny, bo obsługiwał mi cały silnik bazy danych z jednej instancji w całym projekcie.
Musiałeś napisać masę podobnego kodu SQL, masę mapowania z DataReaderów na obiekty i z obiektów na SqlCommandy, trochę konwersji między typami danych... Napisałeś kupę kodu, który musisz teraz utrzymywać, a którego mógłbyś wcale nie mieć.
Dla mnie wygoda to nie pisaniu kodu, a nie pisanie go dużo. :)
To teraz dla mvvm
taki model to już nie będzie po prostu prosta klasa z własnościami i paroma metodami, tylko cała logika przejdzie z native SQL'a do tegoż modelu, obsłużona przez ORM?
Jaką logikę masz na myśli? ORM obsługuje głównie operacje CRUDowe, jeśli w bazie masz obecnie zaszytą np. logikę naliczania rabatów dla klientów w zależności od ich stażu w sklepie, to tego Ci ORM nie da, musiałbyś sam zaimplementować w C#.
NIe będzie designera do EF? MS strzela sobie w stopę chyba jak tak. EF był właśnie dlatego prostszy do ogarnięcia, że szybko można było wyklikać coś działającego, łącznie z przejrzystym diagramem bazy (no, powiedzmy że przejrzystym jeśli nie ma tam 500 tabel a 5 albo 10).
EF i tak jest najpopularniejszy, bo promują go wszystkie tutoriale MS do MVC i WPF, więc dotnetowe-newbie-lemingi będą go używały.
Wcześniej zapomniałem o najważniejszej zalecie EF. Otóż, EF stosuje własną matematykę!
Dana jest właściwość typu decimal
zmapowana na decimal(18,2)
w bazie danych. Właściwość ma wartość np. 20.4777
. Co się znajdzie w bazie po insercie? Oczywiście 20.47
. Dlaczego nie `20.481, jak nakazuje matematyka? Bo czemu nie? Bo tak się da! Bo to jest Entity Framework! Bo się skompilowało, znaczy jest dobrze!
Żeby było śmieszniej, w czystym ADO.NET działa to dobrze. A EF przecież z niego korzysta. Jak oni zahackowali domyśle działanie ADO.NET, że to się posypało? I kto to kuźwa testował, że tak podstawowego przypadku nie wykryli?
Żeby było jeszcze śmieszniej, to nie zostało naprawione - ale w wersji 6.ileś dodano flagę włączającą prawidłowe zaokrąglanie: https://msdn.microsoft.com/en-us/library/system.data.entity.sqlserver.sqlproviderservices.truncatedecimalstoscale%28v=vs.113%29.aspx
Ale jakby nie patrzeć, żaden inny ORM nie daje możliwości wyboru między stosowaniem matematyki a totalnym wyjebaniem na jej zasady. Gimbusy są pewno zachwycone. :P