7

Ich bereite ein neues Windows-Projekt vor und frage mich, welche Art von DAL-Technologie zu verwenden ist. Ursprünglich war ich auf der Suche nach etwas Einfachem, um nicht zu viel Zeit damit zu verbringen, es zu bauen. Aber ich verstehe auch, dass es auf lange Sicht effizient und skalierbar sein muss.Neues .NET 3.5-Projekt: Welche DAL-Technologie verwenden?

Ich plane WPF (MVVM) Client und WCF Service auf einem 3-Tier-System zu verwenden.

einfach alle vorhandenen Technologien zusammenzufassen ich vertraut bin:

Datasets

PRO: Könnte ein bisschen altmodisch, aber sehr einfach sein, die meisten Teile Auto zu bedienen und lassen für dich generiert. Ein wichtiger Aspekt von Datensätzen ist die Leichtigkeit, mit der verwandte Daten über die Beziehungen übertragen werden. Auch in gewisser Weise ist es von der Datenbank getrennt und könnte die Updates vereinfachen, indem es sich automatisch um Zeitstempel kümmert. Beinhaltet Validierung.

CONTRA: Ziemlich altmodisch. Manche betrachten sie als keine realen Geschäftsobjekte/Modelle, sondern nur als Spiegel Ihrer SQL-Datentabellen. Die Übergabe zwischen WCF-Service/Client kann schwieriger sein als selbst erstellte Geschäftsobjekte.

Enterprise Library 4.1 - Data Access-Block

PRO: Die DAL das in ein Fabrikmuster gesetzt wird. Es sorgt automatisch für das Öffnen und Schließen der Verbindung. Sehr einfach zum größten Teil zu verwenden. Es unterstützt sowohl DataSets als auch normale SQL Sps, um eigene Business-Objekte zu erstellen. Als Teil eines fortlaufenden Frameworks kann es viel effizienter sein, in Kombination mit dem Rest der Enterprise Library ein effizientes Endprodukt zu verwenden.

CONTRA: ??

Linq to SQL

PRO: Auto erstellt die SQL-Tabellen in Geschäftsobjekte. Einfach zu CRUD. Theoretisch eine sehr schöne Art, es zu tun.

CONTRA: Nachdem ich damit herumgespielt habe, als es herauskam, fand ich es flockig und manchmal instabil. Es wird bereits als eine tote Technologie angesehen, nachdem Microsoft bekannt gegeben hat, dass Entity Framework 4.0 - als Teil von .NET 4.0 - von Microsoft empfohlen wird. In .NET 4.0 sind nur wenige Fehlerkorrekturen zu erwarten, aber keine Erweiterungspläne mehr.

Entity Framework 4.0

Ich weiß nichts über sie, sondern nur, dass es schließlich alles andere als auf .NET 4.0 ersetzen. Ich bin auch versucht, es zu benutzen, aber da es immer noch in BETA ist, würde ich diesen Weg noch nicht gehen können.

Ich bin sehr versucht, Enterprise Library 4.1 - Datenzugriffsblock zu verwenden und meine eigenen Geschäftsobjekte zu erstellen. Die große Con ist, dass es mehr Zeit braucht, um die DAL zu erstellen. Es sei denn, jemand kann mich davon überzeugen, DataSets stattdessen über den Datenzugriffsblock zu verwenden.

Was sind Ihre Kommentare und Ideen? Vielen Dank, Kave

Antwort

3

Sie erwähnen Entity Framework als Teil des "Contra" für die Option Linq to SQL, aber Sie sollten es anstelle von Linq zu SQL betrachten - es bietet fast die gleiche Funktionalität und mehr. Für Projekte mit kleineren Datenbanken bietet es definitiv eine Menge Geld. Es kann in EF schwierig sein, den Kontext für größere Datenbanken zu verwalten, und Schemaänderungen können dazu führen, dass Dinge nicht mehr funktionieren, aber diese Herausforderungen gibt es bei jedem Datenzugriffsansatz.

Der größte Nachteil für EntLib ist meiner Meinung nach, dass Sie immer noch Ihre eigenen Datenobjekte rollen. Die Enterprise-Bibliothek entzieht der ADO.NET-Implementierung der alten Schule eine Menge des Plumbing-Codes. Das ist zwar schön, aber es erzeugt keine Datenobjekte für Sie, die sofort für die LINQ-Abfrage verwendet werden können.

+0

Ich habe es einige Gedanken gegeben und ich denke, du hast Recht. Die Verwendung von EntLib bedeutet immer noch viel Arbeit von Hand. Als du EF erwähnt hast, meintest du Version 4.0 BETA oder meinst du die aktuelle Version 1.0? Ich habe Version 1.0 letzte Nacht wirklich versucht und ich muss sagen, dass es ziemlich gut aussieht und macht den Job. Kurz davor habe ich SubSonic ausprobiert, bei dem es nicht gelungen ist, Code für meine Nachschlagetabellen zu erstellen, die den gleichen Namen wie eines ihrer vorhandenen Felder hatten. Dies muss Subsonic verwirrt haben. EF 1.0 hat den Job perfekt gemacht und ich denke, ich werde diesen Weg gehen. Was denken Sie? – Houman

+0

EF 1 ist nicht annähernd so funktionsreich wie LinqToSql und LinqToSql ist ziemlich schlecht Feature-weise. EF 1 fehlt die Unterstützung für grundlegende ORM-Konzepte wie die Unterstützung für korrektes Lazy-Laden, die LinqToSql unterstützt. –

+0

Ich habe EF 1.0 für ein paar Apps verwendet, solche mit kleineren Datenbanken, die nicht performancekritisch waren und damit zufrieden waren - die Grundvoraussetzung war, "die Daten in und aus der Datenbank zu bekommen". Wenn Features, Skalierbarkeit und Leistung ein großes Problem darstellen, können Sie EF trotzdem ausprobieren, aber den Datenzugriff mithilfe einer anderen Softwareschicht oder etwas wie CSLA abstrahieren, um später Datenzugriffstechnologien zu wechseln oder zu aktualisieren. Natürlich sind die RAD-Vorteile zu diesem Zeitpunkt möglicherweise nicht mehr vorhanden und Sie sollten einen vollständigen benutzerdefinierten Stack in Betracht ziehen. –

1

A. Überprüfen Sie auch NHibernate.

B. DataSet - das schnellste und einfachste, aber Sie codieren viel.

Der ganze Rest - es gibt eine Menge gut in der Verwendung von ORM-Tools, aber es gibt eine Menge Probleme mit 3 Tiering mit ihnen.

(verzögertes Laden ist ein Problem zu behandeln, viele großen Objektbäume machen, die Wirkung Leistung, Caching nicht so intelligent wie möglich)

Also - es hängt davon ab, was Ihre wichtigsten Bedürfnisse sind, und wie viel Zeit, die Sie mit dem Studium von EL/LINQ oder NHibernate verbringen möchten, bevor Sie mit dem Codieren beginnen, b/c Es gibt eine Lernkurve mit diesen Tools.

2

Wir verwendeten früher DataSets mit EntLib 4.1 Data Application Block.

Wir verwenden jetzt Entity Framework. Mit Entity Framework haben wir eine enorme Produktivitätssteigerung gegenüber EntLib 4.1 erreicht. (Progamm die Datenschicht für 80 Tabellen in 10 Stunden statt 80)

Entity Framework 4 ist noch in der Beta, aber wenn es eine Weile dauert, bevor Ihr Projekt live geht, würde ich mit EF 4 gehen. Sie erhalten die Produktivität eines ORM gleichzeitig die Flexibilität der Verwendung von POCO (Plain Alt Clr Objects)

+0

Vielen Dank, dass Sie Ihre Erfahrungen geteilt haben. Wurde die EF 1.0 oder EF 4.0 Beta verwendet? – Houman

+0

@Kave, es war EF 1.0, aber wir begannen damit, es zu verwenden, während es in der Beta war –

1

Beste Idee ist die Möglichkeit, beide Technologien gleichzeitig zu verwenden. Wie können Sie es tun? Es ist sehr einfach mit Repository-Muster. Zuerst müssen Sie eine generische IRepository-Schnittstelle erstellen. Etwas mag das:

public interface IERepository<E> 
{ 
    DbTransaction BeginTransaction(); 
    void EndTransaction(); 
    void Add(E entity); 
    void Delete(E entity); 
    int Save(); 

    ObjectQuery<E> DoQuery(string entitySetName); 
    IList<E> SelectAll(string entitySetName); 
    E SelectByKey(int Key); 

    bool TrySameValueExist(string fieldName, object fieldValue, string key); 
    bool TryEntity(ISpecification<E> selectSpec); 

    int GetCount(); 
    int GetCount(ISpecification<E> selectSpec); 
    int AddAndSave(E entity); 

} 

Ich bevorzuge Entity Framework. Ich habe 3 Projekte darauf basierend erstellt. Es funktioniert sehr schnell, insbesondere Abfragen mit Paging. Also, nachdem Sie create base generische Klasse Repository mit virtuellen Methoden erstellen, was implementieren IRepository-Schnittstelle. Und das ist alles. Jetzt haben Sie sehr schnell Art und Weise DAL Schreiben einfachen Code wie folgt zu erstellen:

public class MonthRepository:Repository<Month> 
{ 

} 

Sie haben die Möglichkeit, alle Methoden der Basisklasse außer Kraft zu setzen und erstellen Sie den Zugriff auf DB gespeicherte Prozedur, wo Sie brauchen. Und Sie können damit umgehen, ohne den Code an anderen Stellen zu ändern. Dein Wille gibt immer noch denselben Typ von Entitäten zurück, aber er wird sie auf andere Weise erhalten.

Reade mehr auf http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

+0

Danke Kumpel. Diese Lösung klingt in der Tat interessant, wenn es mir mehr Flexibilität geben würde, das Repository auszutauschen. Ich muss es immer noch zuerst verstehen. Gib mir ein paar Tage, um es nach der Arbeit bitte zu studieren. ; o) – Houman

1

NHibernate hat die beste Mix von Feature-Set, Reife und Unterstützung.

NHibernate, Entity Framework, active records or linq2sql

sollten Sie berücksichtigen Linq eine Priorität für jede Lösung unterstützen Sie betrachten und Ihre ersten beiden oben genannten Optionen nicht Linq unterstützen.

+0

Hallo Michael, Ich habe auch über NHibernate gelesen. Ich fand die Dokumentation nicht so einfach und es scheint eine sehr komplizierte Anwendung zu sein. Es sei denn, du kennst einige Websites, die ich noch nicht kenne. Ich fühle mich dort ein wenig verloren. Unglücklicherweise funktionierte SubSonic wegen eines Fehlers nicht für mich. Es gibt immer noch das Castle Project, das ich ausprobieren könnte, oder ich bleibe bei MS-Lösungen wie EF 1.0 und hoffe, bald auf v4.0 upgraden zu können, sobald es verfügbar ist. – Houman

+0

Wenn Sie sich in NHibernate nicht zurecht finden, werden Sie wahrscheinlich auch nicht von LinqToSql oder EntityFramework erhalten. Die Dokumentation von NHibernate ist nicht wirklich schlechter als die Dokumentation anderer ORM. Es gibt eine Lernkurve für jeden ORM, die Kurve von NHibernate beginnt gerade früher. NHibernate erfüllt wahrscheinlich Ihre Anforderungen, während die anderen wahrscheinlich nur bis zu einem bestimmten Zeitpunkt Ihre Anforderungen erfüllen und Sie dann trotzdem mit NHibernate beginnen. Letztendlich ist es dein Ruf und deine Verantwortung. –

+0

Danke Michael. Was halten Sie von diesem Fluent NHibernate? Ist es eine Art Assistent, um das Mapping für mich automatisch generieren zu lassen? Gibt es hilfreiche Tools, um das Leben mit NHibernate zu erleichtern? – Houman