2009-08-22 13 views
5

Miałem dyskusję z kolegą na temat "Linq to SQL". Wciąż jestem nowy w .NET, więc myśli, że muszę się więcej nauczyć. (nadal 30 lat ogólnego doświadczenia w programowaniu powinien liczyć na moją korzyść, prawda?) Przeczytałem kilka książek i dla nowego projektu zdecydowałem się na wykorzystanie modelu danych jednostki ADO.NET. Mój kolega nie zgodził się z tym, ponieważ "wiedział", że jednostki mają wiele problemów. To spowodowało wycieki pamięci na serwerze bazy danych, a Microsoft i tak go zaprzestanie. Powiedział mi, że powinienem użyć modułu danych. Po prostu dodaj .dbml do mojego projektu i użyj Link na górze.Co to jest "Linq to SQL"?

Ma 5 lat doświadczenia w technologii .NET, czyli 4 lata więcej niż moje doświadczenie.

zatrzymałem się więc nie nazwałbym go kretynem albo idiota albo cokolwiek, ponieważ wydaje mi się, że on myśli, że „Link do SQL” == „Entity Data Model” ...

Nadal Zacząłem mieć małe wątpliwości. Myślałem, że Linq do SQL opiera się na plikach .dbml, a więc oparte na modelach danych. I słyszałem, że Linq do SQL ma kilka problemów technicznych i że wkrótce zostanie zastąpiony przez model Entity. Jeśli mój kolega wymieszał te dwie, to jest kompletnym głupkiem. Ale ponieważ ma pięcioletnie doświadczenie i skoro wątpię, by mój pracownik zatrudnił nawet kretynów, zacząłem mieć wątpliwości.

Co to jest "Linq to SQL"?

Odpowiedz

19

LINQ do SQL i Entity Framework to nie to samo.

Są to zasadniczo różne ORMy, obie firmy Microsoft i obie działające jako dostawcy LINQ. LINQ to SQL został wprowadzony z .NET 3.5, a Entity Framework został wprowadzony w .NET 3.5 SP1.

To prawda, że ​​Microsoft bierze Entity Framework naprzód zamiast LINQ do SQL, chociaż wiele osób w społeczności nalega, by i tak ulepszyli LINQ do SQL - to prostsza struktura niż EF. W odpowiedzi Microsoft powiedział, że spróbuje uczynić EF łatwiejszym w użyciu, gdy wymagane są tylko proste modele.

LINQ do SQL działa tylko w określonych bazach danych - głównie SQL Server i SQL Server CE. Środowisko Entity Framework jest (przynajmniej teoretycznie) bardziej agnostyczne dla bazy danych, więc dostawcy baz danych mogą łączyć swoich dostawców.

+4

Świetna odpowiedź! Chciałbym tylko wspomnieć o "wycieku pamięci" wspomnianego kolegi Alexa. ORMy nie uzyskują dostępu do bazy danych w żaden szczególny sposób. Wykonują instrukcje SELECT, UPDATE i INSERT jak wszyscy, po prostu konwertują wyniki na obiekt po swojej stronie (a nie na bazie danych). Ponieważ baza danych nie wiedziałaby nawet, że ORM ją przesyła, w jaki sposób ORM spowoduje wyciek pamięci więcej niż inni użytkownicy? Z mojego doświadczenia wynika, że ​​kompetentni ludzie mogą nieświadomie odgadywać, zakładać lub "wypełniać" luki w swojej wiedzy (wiem, że tak), co może czasem prowadzić do mówienia niedokładnych rzeczy. –

+0

Jon, czy rzeczywiście masz pracę? Widzę, że publikujesz fantastyczne odpowiedzi w całym miejscu, świetna praca dla społeczności. –

+0

@Jason: Tak, ale nie w soboty :) –

2

Jeśli znajomy sugerował, że LINQ do podmiotów odchodzi, on ma go w tył:

LINQ to SQL nadal będą obsługiwane, ale nie znacznie rozszerzone w przyszłości. LINQ to Entities ma pozostać i jest preferowanym przez Microsoft systemem dostępu do danych dla .NET.

+2

+1 Tak ważna w tej dyskusji! – madcolor

+0

+1 rzeczywiście! Dodatkowo dochodzi do wniosku, że mój kolega jest kretynem, ponieważ doświadczony programista .NET powinien znać różnicę. Och, cóż ... Udało mi się go zepchnąć, po prostu stwierdzając, że nadal używam bytów, w którym to momencie postanowił przestać wtrącać się. –