public void Run() { // Der DataContext überwacht auch Änderungen an Objekten! // Somit ist es möglich ohne zusätzlichen Aufwand // das Change Set gegen die Datenbank zu schicken. using (var dbx = new KnowledgeBaseDataContextDataContext()) { // Logging aktivieren dbx.Log = Console.Out; // Artikel mit Id 218 holen. var article = (from x in dbx.Articles where x.Id == 218 select x).Single(); // Titel und DateEdit ändern. article.Title = "Hallo Stuttgart!"; article.DateEdit = DateTime.Now; // Änderungen speichern. // Hinweis: Bei mehrmaligem Ausführen hat das Setzten des Titels kein Effekt mehr, // da dieser bereits "Hallo Karlsruhe!" ist. Der DataContext merkt das und sendet // nur 'wahre' Änderungen an die Datenbank. dbx.SubmitChanges(); } // Nochmal den Artikel aus der Datenbank holen und die geänderten Felder anzeigen. using (var dbx = new KnowledgeBaseDataContextDataContext()) { var article = (from x in dbx.Articles where x.Id == 218 select x).Single(); Console.WriteLine("Title: {0}\nChanged: {1}", article.Title, article.DateEdit); } }
public void Run() { // Es sollen nur Artikel aus folgender Kategorie abgerufen werden: var categoryTitle = "Visual Basic.NET"; // Wie immer muss zunächst der DataContext instanziert werden. using (var dbx = new KnowledgeBaseDataContextDataContext()) { // Der DataContext kann sein Logging auf der Console ausgeben. dbx.Log = Console.Out; // Die Basis Abfrage solle alle Artikel einer Kategorie mit einem // bestimmten Titel zurückgeben. var articles = from mapping in dbx.ArticleCategoryMappings where mapping.Category.Title == categoryTitle select mapping.Article; // Das Ergebnis soll nach dem Artikel-Titel aufsteigend sortiert werden var ordered = from a in articles orderby a.Title ascending select a; // Und zuletzt interessieren nur die ersten 4 Elemente var firstFour = ordered.Take(4); // Erst hier wird die Linq Query in Sql übersetzt und ausgeführt // (Siehe Looging auf der Console) // Alle drei Query (Basis, Sortierung, Take) werden in ein einziges Sql zusammengeführt. foreach (var article in firstFour) { Console.WriteLine(article.Title); } } }
public void Run() { // Der DataContext steuert die Kommunikation mit der Datenbank. // Er übersetzt Linq Abfragen in Sql, führt diese gegen die Datenbank // aus und erzeugt aus den zurückgegebenen Daten Objekte. using (var dbx = new KnowledgeBaseDataContextDataContext()) { // using sollte verwendet werden, da der DataContext // nicht-verwaltete Ressourcen erzeugt, wie z.b. // SqlConnection Objekte. // Auch hier können Abfragen gegen eine Datenbank GENAU SO // definiert werden wie Abfragen gegen Objekt-Listen oder // Xml. // In diesem Beispiel werden alle Artikel aus der Datenbank gelesen, // die neuer sind als zwei Monate, die Ergebnismenge wird sortiert // und nur die obersten 4 Elemente werden zurückgegeben. var articles = (from x in dbx.Articles where x.DateCreated >= DateTime.Now.AddMonths(-2) orderby x.Views descending select x).Skip(3).Take(4); System.Diagnostics.Debug.WriteLine(articles); // Hinweis: Die Abfrage wird komplett nach Sql übersetzt, // man findet also sowohl die Where Einschränkung, als auch die // sortierung und das Take wieder! // Die Abfragen wird übrigens erst ausgeführt, wenn articles mit foreach durchlaufen wird // bzw. .Count aufgerufen wird. Diese 'späte' Ausführung wird durch IQueryable ermöglicht. // Daten abrufen und ausgeben. foreach (var article in articles) { Console.WriteLine(article.Title); } } }