Nie jest martwy, ale Microsoft koncentruje się teraz na Entity Framework.
Użyłem LINQ do SQL w małych projektach i jest całkiem przyjemny jako lekka warstwa danych i rozważę użycie go ponownie w projektach o podobnej wielkości. Sama implementacja LINQ jest naprawdę dobra, a do niedawna znacznie lepsza niż projekt LINiber firmy NHibernate. W większym projekcie, w którym korzystałem z L2S, trudno mi było wymyślić wzór jednostki pracy, z którego byłem zadowolony, ze względu na ograniczenia dotyczące klasy „DataContext” L2S. Próba wdrożenia czegoś takiego jak „Sesja na żądanie” w L2S wydaje się albo bardzo trudna, albo niemożliwa.
Nie uważałbym też L2S za prawdziwą ORM, ponieważ tak naprawdę nie daje wielu opcji mapowania. Twój projekt klasy naprawdę musi być zgodny ze schematem bazy danych (tabela dla klasy), w przeciwnym razie będzie walczył z tobą na każdym etapie. Inną rzeczą, która mi się nie podoba w L2S, jest potrzeba używania określonych typów ( EntitySet
i EntityRef
) do obsługi kolekcji, referencji i leniwego ładowania. Oznacza to, że nie można zachować agnostyczności modelu domeny ORM bez dodania kolejnej warstwy abstrakcji.
Innym moim problemem z L2S jest wyłączne poleganie na LINQ do generowania zapytań. Dostawca LINQ jest bardzo dobrze napisany i generalnie tworzy porządny SQL dla większości zapytań, ale mam obawy, że istnieją bardziej złożone zapytania, których nie można dobrze wyrazić za pomocą LINQ. Używając L2S, musisz w zasadzie powrócić do wywoływania procedur przechowywanych w tych przypadkach, podczas gdy (na przykład) NHibernate ma kilka interfejsów API (dostawca LINQ, QueryOver, HQL itp.), Które można wykorzystać, gdy chcesz uzyskać większą kontrolę nad generowanym SQL.
W obronie L2S przed NHibernate jest o wiele mniej kosztów ogólnych związanych z uruchomieniem projektu.