Objectspaces
Eintrag zuletzt aktualisiert am: 07.06.2006
Das
Object Persistance Framework (alias Objectspaces) war eine Microsoft-Technologie für die Speicherung von Objekten in relationalen
Datenbanken. Objectspaces überbrückt dabei transparent den Impedance Mismatch zwischen Objekten und
Datenbank. Objectspaces war Teil von
ADO.NET 2.0 in der
.NET Framework 2.0 Alpha-Version, wurden dann aber nicht ins finale Produkt übernommen, weil es Überschneidungen mit dem datenbankbasierten
Dateisystem WinFS sowie Leistungsprobleme gab.
Objectspaces kehrt zurück als Teil von ADO
.NET 3.0/
LINQ.
Die folgenden Informationen beziehen sich auf den Objectspaces-Ansatz in
ADO.NET 2.0 Alpha!!!
Objectspaces (
System.Data.ObjectSpaces) verwendet Mapping Files zur Übersetzung zwischen Objekten und der darunterliegenden relationalen
Datenbank. Das Mapping File kann mit Hilfe der Hilfsklasse ObjectPersistence erstellt werden. Die Hilfsklasse erstellt ein einfaches Mapping (1 Klasse == 1 Tabelle).
Für Mapping-Files bietet
Visual Studio einen Designer.
Speichern
Eine Klassen, deren Objekt persistiert werden sollen, müssen nicht von einer Basisklasse abgeleitet sein.
Es können auch private Mitglieder persistiert werden.
1. Markieren mit os.StartTracking(obj, InitialState.Inserted)
2. Speichern mit os.PersistChanges(obj)
Laden
Abfragen mit Get
ObjectSet() auf der Klasse ObjectSpace durch die
Methode GetObject() bzw. GetObjectReader() mit Hilfe von
OPath gestellt werden.
Direct Query: Unterobjekte einzeln explizit abfragen
Span: Unterobjekte werden automatisch mit geladen
Delayed Loading (alias
Lazy Loading) möglich, indem für
Objektmengen mit ObjectList realisiert werden. Objekte werden dann erst bei Bedarf aus der
Datenbank geladen.
Geplant:
Einsatz von
Generics um Type-Cast zu vermeiden
Reqort Query Language
Ändern
Speichern mit PersistChanges(). (verwendet optistischen Locking)
Transactionen möglich mit BeginTranction(), Commit() und Abort(). (dann pessimistisches Locking)
wird automatischen in Enterprise Services Transaction gelistet, wenn
Komponenten in
COM+ läuft
Löschen
Methode MarkForDeletion()
Löschen ohne sie vorher zu lesen