2009-04-30 8 views
6

Ich denke darüber nach, Zeit mit dem Lernen und Verwenden von LINQ to SQL zu verbringen, aber nach jahrelangen Best Practices, die NICHT SQL einbetten, fällt es mir schwer, Paradigmen zu ändern.Wechsel zu LINQ

Warum scheint es jetzt akzeptiert zu werden, Abfragen in kompilierten Code einzubetten? Es scheint in gewisser Weise für mich fast ein Rückschritt zu sein.

Hat jemand nach dem Wechsel zu LINQ Probleme mit dem Abfrage/Abfrage/Compile/Deploy-Zyklus gehabt?

Ich denke, ich könnte immer noch auf das fertige Entity Framework warten.

Was denkst du?

+4

+1 für das Einbetten von SQL in Ihren kompilierten Code ist eine wirklich schlechte Übung! Ich bin bei dir, Mann! –

Antwort

8

Der Vorteil von Linq zu Sql ist, dass es Abfragen in kompiliertem Code nicht wirklich einbettet - nicht wirklich. Die Linq-Anweisung bedeutet, dass Ihr .Net-Code tatsächlich über die erforderliche Logik verfügt, um die eingebettete Sql-Anweisung zu erstellen, nicht die Raw-Sql.

Es macht wirklich sehr viel Sinn, .Net-Code, der direkt in die Sql konvertiert, auszuführen, anstatt eine lange Liste von Sprocs mit zugehöriger Dokumentation. Der Linq-Weg ist viel einfacher zu pflegen und zu verbessern.

Ich glaube nicht, dass ich ein vorhandenes Projekt zu Linq wechseln würde - es ist wirklich ein Ersatz für die gesamte Datenebene und es kann die Art und Weise ändern, wie der gesamte Zugriff auf diese Ebene erfolgt. Wenn Sie nicht von einem sehr ähnlichen Modell wechseln, werden die Kosten für potenzielle Gewinne viel zu hoch sein.

Linq to wirkliche Macht der Sql in neue Anwendungen schnell schafft - es erlaubt Ihnen sehr schnell die Daten-Layer-Code zu erstellen.

+1

Zustimmung, außer dass LINQ to Entities möglicherweise ein besserer Ort ist, um jetzt zu beginnen (aber alle die gleichen Kommentare re. Einbettungsabfragen gelten). – Richard

+0

Ich habe ein großes Projekt auf EF entwickelt, da es Beta war (6 Monate) und ich bereue es. EF ist nicht produktionsbereit. Linq2SQL ist. EF, wie es jetzt ist, ist es Art Halb-Backed-Datenzugriff Technologie, viele Lücken, ineffiziente Abfragen, unvollständige Linq-Implementierung, Databinding Mängel und schlechte objec und servicind Modell. Sparen Sie sich den Schmerz und verwenden Sie Linq2SQL, was eine großartige Technologie ist. Sehen Sie, wie gut EF vNext ist, aber bis dahin ist meine Empfehlung, sich davon fern zu halten, es ist zu viel Mühe. –

2

Sie müssen LINQ to SQL als eine Abstraktion über das Schreiben von SQL direkt selbst denken. Wenn Sie sich damit abfinden können, haben Sie einen Schritt in die richtige Richtung gemacht. Sie müssen auch einige lang gehegte Überzeugungen loslassen, wie kompilierte Sprocs sind immer schneller und SQL-Konten sollten keine Lese-/Schreibberechtigungen haben.

Ich habe festgestellt, dass es möglich ist, schrittweise vorhandene Lösungen zu LINQ to SQL zu verschieben, solange eine klare DAL vorhanden ist und Sie nur die Implementierung ändern, ohne den Vertrag mit dem Code zu beeinträchtigen. Referenzlisten sind ein einfacher Kandidat, da sie nur wenig aussagekräftige, schreibgeschützte Datensätze sind. Die Hauptsache, die Sie beachten müssen, wenn die Nachrüstung mögliche mehrdeutige Klassennamen sind, ist, wenn Sie sie bereits manuell codiert haben, um die Datenbank zu modellieren.

Mit dem Rückblick auf LINQ zu SQL in ein großes Unternehmen (seit CTP Tage), würde ich es wieder in einem Herzschlag tun. Es ist nicht perfekt und es gibt Probleme, aber es gibt enorme Vorteile, insbesondere wenn es um Entwicklungsgeschwindigkeit und Wartbarkeit geht. Es ist ein neues Paradigma und definitiv ein Schritt vorwärts.

3

ich Ihren Punkt undertand, scheint dies in der Tat ein bisschen wie ein Schritt zurück ...

Eigentlich würde ich wahrscheinlich lenken von LINQ to SQL weg und schauen mehr auf LINQ to Entities, Ihre Entitäten modellieren Ihre konzeptionellen Datenmodell und ich persönlich fühlen sich wohler bei der Einbettung von Abfragen gegen ein konzeptionelles Modell in meinem Code. Das tatsächliche physische Modell wird durch ein Entitätsframework von Ihnen abstrahiert.

Dieser Link (entschuldigen Sie das Wortspiel) diskutiert LINQ to Entities und Entity Framework: http://msdn.microsoft.com/en-us/library/bb386992.aspx

ist dies ein interessanter Artikel die Vor- und Nachteile beider Ansätze discussign: http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

bearbeiten Ein anderer Gedanke, Wenn Sie nicht auf EF warten wollen, schauen Sie sich NHibernate an, Sie können LINQ auch dazu ... Siehe http://www.hookedonlinq.com/LINQToNHibernate.ashx

+1

In der Theorie ja. Aber in der Praxis würde ich wirklich zögern, einen Produktionscode zu entwickeln, der auf Entity Framework/Linq-to-Entities basiert. Linq-to-SQL ist produktionsbereit, EF nicht. Obwohl es, wie Sie sagen, eine zusätzliche Abstraktionsschicht hinzufügt, geht diese Abstraktion auf Kosten von ineffizienten SQL-Abfragen, die am anderen Ende ausgegeben werden (db-side). EF vNext - vielleicht, aber die Jury ist immer noch nicht da. Wir müssen nur sehen, was es bringt, wenn es veröffentlicht wird, aber jetzt für EF zu gehen (mit dem Erfolg oder Misserfolg, der immer noch ein großer Unbekannter ist), würde ich nicht empfehlen. Nur meine 2 Cent ... :) – KristoferA

+1

Stimme völlig zu ... aber keine Lösung ist perfekt, auf diese würde ich auf EF warten. Eins ist mir jedoch klar, LINQ ist mächtig und nützlich und es lohnt sich, es selbst zu lernen :-) –

+0

EF 1.0 ist begrenzt, aber es funktioniert und ist in einer Produktionsumgebung verwendbar. Wie alles, was man braucht, um etwas zu lernen, gibt es ein paar Hacks, die nötig sind, um die Einschränkungen zu überwinden (sowohl in den Funktionen des Frameworks als auch in der IDE). Obwohl es in mancherlei Hinsicht begrenzt ist, ist es solide genug und ist ein schneller Weg, um eine App hoch und runter zu bekommen ... und das Lernen wird das Lernen später retten, wenn es für Version 2 aufgeräumt wird ... ich meine 4 (?) . – misteraidan

0

Es gibt eine Implementierung von LINQ to SQL nicht nur für SQL Server-Datenbanken, SQL Server-Entwicklung Bediener können auch die Vorteile dieses effizienten ORM nutzen. Wir haben bereits Support für LaodWith() auf Abfrageebene hinzugefügt und die Fehlerverarbeitung erweitert. Wir planen auch, alle drei Vererbungsmodelle (TPH, TPT, TPC) und Schlüsselfeldgenerierung zu unterstützen. Sie können die Liste der unterstützten Datenbanken finden here

+0

UND es ist kostenlos für uns richtig? –

0

Ich glaube nicht, es als SQL in Ihrem Code einbetten mehr als eine gespeicherte Proc Name Einbettung in Ihrem Code ist. In den meisten Fällen bedeutet eine Änderung an Ihrem Proc eine Änderung Ihres Codes. Zum Beispiel müssen Sie normalerweise einen neuen In/Out-Parameter hinzufügen oder eine Getter/Setter-Methode aktualisieren, um auf eine neue Spalte zu verweisen.

Was es tut, ist eine Menge von der Beinarbeit des Schreibens doppelt so viel Code entfernen, um Eigenschaften und Methoden in Ihrem Code mit Procs und Spalten in Ihrem DB auszurichten.