Ich bin auf der Suche nach einem ORM, das ich mit .net verwenden kann. Ich muss in der Lage sein, eine vollständige Graph-Serialisierung in Xml auf den Entitäten durchzuführen, die das ORM erzeugt. Meine eigene Forschung führt mich in Richtung der Verwendung der WCF und das Entity Framework, um dies zu erreichen, ist dies die beste Option oder gibt es einen einfacheren Weg?
Antworten
Zu viele Anzeigen?Die meisten O/R-Mapper haben eine Änderungsverfolgung innerhalb der Kontext-/Sitzungsobjekte, die Sie zum Abrufen der Entitäten verwenden. Dies führt zu Problemen, wenn Sie das Entitätsobjekt über eine Leitung als xml an einen Client weitergeben, es dort ändern und zurücksenden: Die Sitzung/der Kontext, die/der das Objekt abgerufen hat, ist dann längst verschwunden.
LLBLGen Pro hat eine Änderungsverfolgung in den Entitäten und macht daher die Verwendung von Entitäten über eine Leitung zu einem Kinderspiel. Es kommt mit XML-Serialisierung/Deserialisierung von Graphen für WCF und auch seine eigene binäre Serialisierung für Remoting (viel schneller als die Standard-Binär-Formatierer, und auch viel kompakter).
Haftungsausschluss: Ich bin der Hauptentwickler von LLBLGen Pro.
Nun, die meisten ORM-Tools können Standard-POCO-.NET-Klassen emittieren, und die meisten Standard-POCO-Klassen eignen sich sehr gut für die Serialisierung. Zum Beispiel hat LINQ-to-SQL Unterstützung für DataContractSerializer
(nicht XmlSerializer
) durch Einstellung Serialization Mode
a Unidirectional
. Entity Framework tut das Gleiche (ich glaube nicht, dass Sie irgendwelche Einstellungen für EF ändern müssen).
Für "einfacher" - nun, was ist die Komplexität? Die Einrichtung eines Entity Framework- (oder LINQ-to-SQL-) Modells ist in der Regel nicht sehr kompliziert. Gibt es etwas Bestimmtes, das problematisch ist?
Beachten Sie, dass Xml-Serializer standardmäßig Baum Serialisierer, nicht Grafik Serialisierer. DataContractSerializer
kann richtige Graphen unterstützen, aber Sie müssen es aktivieren (es ist nicht standardmäßig im xml-Modus aktiviert, da es sehr seltsam aussehende xml erzeugt).
Sie erwähnen WCF; das ist eine Kommunikationstechnologie; Sie erwähnen Comms nicht in der Frage, also ist es nicht klar, was Sie hier meinen. Beachten Sie, dass "ADO.NET Data Services" hier eine weitere Option ist, wenn Sie einen REST-basierten Datenzugriff wünschen, aber die meisten ORMs sollten mit WCF gut funktionieren. Es gibt natürlich auch Alternativen.
DataSet s muss der einfachste Weg sein, um Daten auf der Client-Seite in XML zu serialisieren (siehe Verwendung von XML in einem DataSet ). Aber dann ist es offensichtlich nicht eine ORM-Bibliothek...
Soweit ich weiß, werden ORM-Bibliotheken (wie NHibernate ) beruhen in der Regel auf der Verwendung von benutzerdefinierten XmlSerializer (oder angepasste WCF-Serialisierung) ), was für Sie zu viel Arbeit sein kann (oder auch nicht...).
Die vollständige Serialisierung von Graphen in XML ist ein zukünftiges Ziel für Salamanca eine Open-Source-Softwarefabrik, die eine ORM-Bibliothek enthält. Wir sind noch in einem frühen Entwicklungsstadium, aber jede Hilfe ist willkommen...