SQL oder NoSQL (Teil 3)
Kommentare

Zunächst müssen einige Stammdaten, also Kunden und Artikel angelegt werden (Listing 2). Über den Aufruf der Store-Methode der Session merkt man die Objekte zur Speicherung vor:
Session.Store(c);
Session.Store(a1);

Zunächst müssen einige Stammdaten, also Kunden und Artikel angelegt werden (Listing 2). Über den Aufruf der Store-Methode der Session merkt man die Objekte zur Speicherung vor:

Session.Store(c); 
Session.Store(a1); 
Session.Store(a2);   

Sodann kann ein Order-Objekt zusammengestellt werden. Hierbei werden neue Instanzen für den OrderCustomer angelegt, die benötigten Informationen werden kopiert: 

var o = new Order() 
{ 
Customer = new OrderCustomer() { Id = c.Id, FirstName = c.FirstName, LastName = c.LastName } 
}   

Listing 2: Daten speichern mit Raven

var Store = new DocumentStore() { Url = "http://localhost:8080"}; 
Store.Initialize(); 
using (var Session = Store.OpenSession()) 
{ 
var c = new Customer() { FirstName = "Karl", LastName = "Breselmann-Stutz", Email = "kalle@kallemail.com" }; 
var a1 = new Article() { Name = "Apfel", IsBiological = true, IsGoodForYou = true }; 
var a2 = new Article() { Name = "Spielzeugauto", IsBiological = false, IsGoodForYou = true }; 
Session.Store(c); 
Session.Store(a1); 
Session.Store(a2); 
var o = new Order() 
{ 
Customer = new OrderCustomer() { Id = c.Id, FirstName = c.FirstName, LastName = c.LastName }, 
Positions = new List() 
{ 
new OrderLine() 
{ 
Article = new OrderLineArticle() { Id = a1.Id, Name = a1.Name }, 
Price = 2.5, 
Quantity = 3 
}, 
new OrderLine() 
{ 
Article = new OrderLineArticle() { Id = a2.Id, Name = a2.Name }, 
Price = 10.95, 
Quantity = 1 
} 
} 
}; 
Session.Store(o); 
Session.SaveChanges(); 
}   

Die ID des Kunden c ist zu diesem Zeitpunkt durch den Aufruf der Store-Methode bereits gefüllt. Die übrigen Daten des Auftrags werden ebenfalls gefüllt (Listing 2). Dann wird der Auftrag gespeichert: Session.Store(o);. Zum jetzigen Zeitpunkt sind die Daten noch nicht an den Server übertragen worden. Das geschieht durch den Aufruf Session.SaveChanges();. Wirft man nun einen Blick auf das Konsolenfenster des Servers, sieht man eine Ausgabe ähnlich der in Abblidung 3. Die Anfragen an den Server sind jeweils mit einem URL angegeben. Dort zeigt sich, dass das REST API über das Raven plattformneutral alternativ zum .NET API angesprochen werden kann. Die Anfragen an den Hilo-Endpunkt wurden von Store ausgelöst, um eine ID für die Objekte zu erfragen. Die Anfrage an den bulk_docs-Endpunkt sendet die Objekte beim Aufruf von SaveChanges an den Server. Das Ergenbis kann unter dem URL http://localhost:8080 angesehen werden. Er öffnet die Verwaltungsoberfläche von Raven, die in Form einer Silverlight-Anwendung umgesetzt ist (Abb. 4). Dort kann man sich die erstellten Dokumente anzeigen lassen. Das Dokument zu dem soeben gespeicherten Order ist in Listing 3 zu sehen. Raven hat für das Dokument automatisch die ID orders/1 vergeben. Sie setzt sich offensichtlich aus dem pluralisierten Namen des Entities und einer fortlaufenden Nummer zusammen. Auch für den Kunden und die Artikel sind ähnliche IDs vergeben worden. Neben dem eigentlichen Dokument speichert Raven noch .NET-spezifische Metadaten, nämlich den CLR-Typnamen, der zu diesem Dokument gehört. Wenn man von einem bestehenden Objektmodell ausgeht, kann man in Sekundenschnelle seine Daten abspeichern. Das aufwändige Erstellen eines Schemas, das für das vorliegende Beispiel immerhin vier Tabellen umfasst hätte, entfällt vollständig.

Listing 3: Das Order-Dokument „orders/1“

{ 
"Customer": { 
"Id": "customers/1", 
"FirstName": "Karl", 
"LastName": "Breselmann-Stutz" 
}, 
"OrderDate": null, 
"Positions": [ 
{ 
"Article": { 
"Id": "articles/1", 
"Name": "Apfel" 
}, 
"Price": 2.5, 
"Quantity": 3.0 
}, 
{ 
"Article": { 
"Id": "articles/2", 
"Name": "Spielzeugauto" 
}, 
"Price": 10.95, 
"Quantity": 1.0 
} 
] 
} 
// Metadaten 
{ 
"Raven-Entity-Name": "Orders", 
"Raven-Clr-Type": "Raven.HelloWorld.Order, Raven.HelloWorld" 
}   
Abb. 3: Die Konsolenausgabe des Raven-Servers
Abb. 3: Die Konsolenausgabe des Raven-Servers
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -