2009-03-06 8 views
10

Als ich zuletzt in der Programmierung arbeitete, versuchten wir, von DataReaders und der traditionellen ADO.NET API in Richtung Object Relational Mapping (ORM) zu gehen..NET- und Datenbank-Layer

Dazu haben wir über sqlmetal einen DataContext unseres DB generiert. Es gab dann eine dünne Datenschicht, die die DataContextprivate machte, und jeder Code, der auf die Datenbank zugreifen musste, musste eine public-Methode in dieser dünnen Datenschicht verwenden. Diese Methoden waren grundsätzlich gespeicherte Prozeduren; Sie würden Abfragen in der Datenbank über LINQ to SQL durchführen.

Ist das heute ein gemeinsamer Ansatz? Ich meine, sind alle, die das .NET 3.5-Framework verwenden, wirklich sqlmetal in ihrem Build-Prozess laufen, oder was? Es schien fast wie ein Hack zu der Zeit.

Im Grunde würde ich gerne wissen, ob LINQ to SQL und sqlmetal zu erwarten ist, wenn ich heute in einem .NET 3.5-Shop eine DAL schreibe, die keinen externen Quelle ORM.

+0

Ich würde auch gerne wissen. Ich benutze seit Jahren mein eigenes DAL/ORM und alles, was ich sehe, sind Dinge, die von MS kommen und gehen (linqToSQL ein typisches Beispiel). Ich behalte meine für jetzt. –

+0

gleich hier ... was ich habe funktioniert, ich habe kürzlich ein Projekt in linq2sql, um zu sehen, ob ich etwas wichtiges verpasst, und während es OK war, nicht genug, um mich zu wechseln ... Ich bleibe bei Datenreadern und gespeicherte Prozeduren und benutzerdefinierte Klassen, um alles zu handhaben. –

+0

Es ist großartig zu sehen, wie sich .NET weiterentwickelt, aber ein wenig frustrierend, herauszufinden, auf welches Pferd man wetten kann! :) – core

Antwort

3

Ihr Ansatz ist gut. Ich benutze derzeit Astroria Dienste (ADO.NET Data Services). Es gab eine nette Einführung in MSDN Magazine darüber.

Ich mag auch die neue PLINQO (erfordert CodeSmith Tools obwohl). Das ist meiner Meinung nach sehr glatt.

Wenn ich eine solche DAL (Service-Schicht) habe, benutze ich nur diesen Dienst von meiner Client-Anwendung (Silverlight oder ASP.NET MVC).

3

Ich denke, es hängt von Ihrer Verwendung ab, aber ich würde sagen mit solch einer dünnen Datenschicht, wie Sie erklärt haben, dass das Ihre DAL wäre. Die meisten Projekte werden eine weitere Ebene darüber aufbauen, hauptsächlich für die Edit/Create-Logik und vielleicht eine Stepplogik für Gets.

Für die meisten meiner Projekte entwerfe ich es so.

Repository hält die Instanz von Datacontext und setzt einige grundlegende Add/löschen Methoden
ProductRepository: Repository legt allgemeine Anfragen (IQueryable)
StoreService eine Instanz von verschiedenen Repositories wie ProductRepository, SalesRepository verwendet und kümmert sich um alle Logik für wie etwas zu schaffen, Ein Produkt.

So etwas wie ...

StoreService.CreateProduct(/* properites */) 

Dieses eine Art Ergebnisklasse zurückkehren würde.

+0

Ich wusste, ich war nicht die einzige Person, die diesen Ansatz für die übliche Linie von Business-App verwendet! Wartbarkeit und Trennung von Bedenken war der größte Vorteil, seit ich mit diesem Ansatz begonnen habe. –

5

Es wird immer noch als beste Methode angesehen, eine Art Datenzugriffsschicht zu haben. Ob dies am besten mit einem ORM erreicht wird, ist ein stark diskutiertes Thema. Es gibt eine Fraktion, die allgemein argumentiert, dass ORMs der richtige Weg sind. Eine andere Fraktion argumentiert, dass Stored Procedures und Datenbank-Zentrik der beste Weg ist.

Auch dies kann nicht genau das Plakat Sie gemeint, aber es ähnlich (und auch die in meiner Kabine)

http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf

1

Diese sehr Seite verwendet LINQ to SQL, so nehmen, dass, wie Sie werden.

Offiziell unterstützt Microsoft Entity Framework über LINQ to SQL in Bezug auf die neue Entwicklung. Es gibt jedoch eine Gruppe von Leuten, die denken, EF is the wrong way to go. LINQ to SQL wird noch für einige Zeit verfügbar sein und ist ein sehr anständiges ORM, wenn auch etwas einschränkend, welches DB-Backend Sie verwenden können.

Ich würde LINQ als einen guten Ausgangspunkt für Ihr ORM empfehlen. Wenn Sie besser brauchen, schauen Sie in EF und/oder NHibernate.

+0

Wissen Sie, ob es eine offizielle Antwort auf die mit diesem "Misstrauensvotum" geäußerten Bedenken gegeben hat? –

+0

Ich habe im Moment keine Links, ich habe auch keine Lust zu graben, aber ich bin mir ziemlich sicher, dass die offizielle Zeile etwas nach dem Motto war: "Schraubt das, wir machen EF so, wie wir es wollen". Ich bin mir sicher, dass es mehr PC als das war. :) Ich denke, sie sagten, dass viele der Probleme in späteren Versionen behoben würden. Schiff früh/oft usw. – Randolpho

0

"Ist das ein gängiger Ansatz heute? Ich meine, ist jeder, der das .NET 3.5 Framework verwendet, wirklich sqlmetal in seinem Build-Prozess laufen, oder was?"

Die Leute, die ich benutze das 3.5 Framework (und das ist fast jeder) - die überwiegende Mehrheit - verwenden immer noch NHibernate. Version 2.0 ist ein sehr schönes OR/M. Ich habe es bei einem kürzlichen Projekt verwendet und es hat meinen Datenzugriffscode deutlich reduziert, bis zu dem Punkt, an dem ich wirklich in Zukunft nichts mehr verwenden möchte. Und die Fluent NHibernate API macht einige Fortschritte für Leute, die die XML-Zuordnung nicht mögen.