Datenzugriff mit dem Entity Framework muss nicht langsam sein. In diesem Vortrag lernen Sie typische Stolperfallen kennen und wie Sie diese umschiffen können
Viele Entwickler nutzen das Entity Framework als Blackbox. In diesem Vortrag wollen wir das Entity Framework entzaubern und einen Blick in die Blackbox werfen. Dabei werden wir darüber sprechen, was bei der Initialisierung des Entity Frameworks geschieht, wie der Status von Entitäten verwaltet wird und auch diskutieren, ob Sie auf dem Kontext tatsächlich Dispose() aufrufen müssen. Wenn Sie also wissen möchten, was das Entity Framework wirklich mit Ihrer Datenbank macht, dann sollten Sie diese Präsentation ansehe.
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzenCarsten Hetzel
In diesem Vortrag vom Symfony User Group Cologne Treffen in Köln zeige ich, wie man mit Hilfe von CSS-Selektoren und der CssSelector-Komponente des Symfony2 Frameworks Datenbankabfragen generieren kann. Diese Technik ermöglicht auch Laien einfache Abfragen von komplexen Datenbeständen effizient durchzuführen.
Der Talk wurde am 25.09.2013 auf der Java User Group Frankfurt gehalten und gibt einen Überblick und Einstieg in MongoDB aus der Sicht eines Java-Programmierers.
Dabei werden folgende Themen behandelt:
- Buzzword Bingo: NoSQL, Big Data, Horizontale Skalierung, CAP-Theorem, Eventual Consistency
- Übersicht über MongoDB
- Datenmanipulation: CRUD, Aggregation Framework, Map/Reduce
- Indexing
- Konsistenz beim Schreiben und Lesen von Daten
- Java API & Frameworks
A power workshop during JAX 2007 on advanced techniques of test-driven development. It deals with acceptance tests using FIT as well as with mock objects, GUI testing and Groovy as a testing language for Java.
Viele Entwickler nutzen das Entity Framework als Blackbox. In diesem Vortrag wollen wir das Entity Framework entzaubern und einen Blick in die Blackbox werfen. Dabei werden wir darüber sprechen, was bei der Initialisierung des Entity Frameworks geschieht, wie der Status von Entitäten verwaltet wird und auch diskutieren, ob Sie auf dem Kontext tatsächlich Dispose() aufrufen müssen. Wenn Sie also wissen möchten, was das Entity Framework wirklich mit Ihrer Datenbank macht, dann sollten Sie diese Präsentation ansehe.
2013-09-12, sfugcgn: CSS-Selektoren für Datenbankabfragen nutzenCarsten Hetzel
In diesem Vortrag vom Symfony User Group Cologne Treffen in Köln zeige ich, wie man mit Hilfe von CSS-Selektoren und der CssSelector-Komponente des Symfony2 Frameworks Datenbankabfragen generieren kann. Diese Technik ermöglicht auch Laien einfache Abfragen von komplexen Datenbeständen effizient durchzuführen.
Der Talk wurde am 25.09.2013 auf der Java User Group Frankfurt gehalten und gibt einen Überblick und Einstieg in MongoDB aus der Sicht eines Java-Programmierers.
Dabei werden folgende Themen behandelt:
- Buzzword Bingo: NoSQL, Big Data, Horizontale Skalierung, CAP-Theorem, Eventual Consistency
- Übersicht über MongoDB
- Datenmanipulation: CRUD, Aggregation Framework, Map/Reduce
- Indexing
- Konsistenz beim Schreiben und Lesen von Daten
- Java API & Frameworks
A power workshop during JAX 2007 on advanced techniques of test-driven development. It deals with acceptance tests using FIT as well as with mock objects, GUI testing and Groovy as a testing language for Java.
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDBMongoDB
Wie Sie MongoDB installieren und mit der MongoDB-Shell arbeiten
Wie Sie einfache Operationen zum Erstellen, Lesen, Ändern und Löschen von Daten nutzen
Wie Sie die Leistung Ihrer Abfragen analysieren und einen Index anlegen
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Funktionale Programmierung hat zu guter Letzt auch in Java Einzug gehalten. Es ist jetzt ganz normal, überall mit Lambdas oder mit map() und filter() zu arbeiten. Aber ist das wirklich funktionale Programmierung?
Wie sieht es aus, wenn man Java 8 mit einer althergebrachten funktionalen Programmiersprache vergleicht? Und was kann der Java-Programmierer, der aus der objektorientierten (OO) Entwicklung kommt, von funktionalen Sprachen lernen und in seinen Java-Alltag integrieren?
Auf diese Fragen ging Nicole Rauch in ihrem Referat ein. Ebenso stellte sie die grundlegenden Aspekte er funktionalen Programmierung vor und zeigte auf, was die funktionale Programmierung so besonders macht.
Gerne stellen wir Ihnen die Slides des Referats zur Verfügung.
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungMongoDB
Dies ist das zweite Webinar der Back to Basics-Serie, in dem Ihnen die Datenbank MongoDB genauer vorgestellt wird. In diesem Seminar werden wir Ihnen zeigen, wie Sie in MongoDB eine einfache Blogging-Anwendung erstellen können.
Dieser Vortrag beschäftigt sich mit den Möglichkeiten der Oracle Datenbank und den von Oracle kostenfrei bereitgestellten Werkzeuge zum Austausch von Daten. Dabei wird das Hautpaugenmerk auf das Laden von externen Dateien (z.B. CSV) in eine Oracle Datenbank.
Folgende Werkzeuge werden vorgestellt:
- Data Pump
- SQL Developer
- SQL*Loader
- SQL*Plus / SQLcl
- External Tables
In PostgreSQL kann man sich mit "explain" ansehen, welchen Execution Plan PostgreSQL für eine Query verwendet. Das hilft beim Suchen von Performance Problemen und hilft, den Durchsatz der Database zu steigern.
Beispiel, wie man eine Rails-Webanwendung durch Optimierung der erzeugten Datenbankabfragen besser skalieren kann.
Vortrag ber der Hamburger Ruby-Usergroup am 8.August 2012.
Der Vortrag gibt einen Einblick in die Auszeichnungssprache AsciiDoctor und dem Programm zur Erstellung von Dokumenten im HTML und PDF Format. Es wird beschrieben, wie AsciiDoctor zur Dokumentation in Java (JavaDoc) verwendet werden kann. AsciiDoctor kann in die bekannten Build-Tools Ant, Maven und Gradle integriert werden, so dass die Dokumentation wie Quellcode regelmäßig übersetzt wird. Als Ausblick wird die Integration von "beschreibenden Grafikformatken" wie GraphViz und PlantUML in AsciiDoctor Dokumente gezeigt.
Was kann man machen, um Angular-1.x-Code auf Angular 2 vorzubereiten? Welche Möglichkeiten werden in der nächsten Zeit aufkommen, um einen Parallelbetrieb zu realisieren.
Mit Xamarin.Forms 4 und Visual Studio 2019 können Sie im Handumdrehen eine eigene App schreiben. In diesem Vortrag und dem zugehörigen Beispielprojekt zeigt Ihnen Microsoft MVP André Krämer, wie es geht. Ausgehend von einer leeren Projektmappe werden Sie live sehen, mit wie wenig Aufwand eine App mit mehreren Bildschirmen entwickelt werden kann. Ein besonderes Augenmerk wird bei der Entwicklung auf dem Einsatz aktueller Xamarin Neuerungen wie z. B. der Shell liegen.
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...André Krämer
Mit ASP.NET Core ist die plattformübergreifende Entwicklung von ASP.NET-Webanwendungen unter Windows, Mac und Linux möglich. Viele Entwickler machen von dieser Option keinen Gebrauch, sondern entwickeln rein unter Windows. Sogar Nutzer von Apple-Geräten starten häufig eine virtuelle Maschine auf Ihrem Mac, sobald sie für ASP.NET entwickeln möchten.
André Krämer machte es lange genauso. Da er den Performanceverlust durch die VM jedoch nicht mehr hinnehmen wollte, beschäftigte er sich damit, wie er seinen Mac konfigurieren muss, um gemeinsam mit seinen Kollegen, die rein unter Windows entwickeln, produktiv an einer ASP.NET-Core- und SQL-Server-Anwendung arbeiten zu können.
In diesem Vortrag berichtet er, wie er sein System konfiguriert hat, welche Hürden es gab und welche Lösungen er gefunden hat, um vollkommen ohne Windows bei gleicher Produktivität in einem gemischten Team mit Windows- und Visual-Studio-Entwicklern arbeiten zu können.
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDBMongoDB
Wie Sie MongoDB installieren und mit der MongoDB-Shell arbeiten
Wie Sie einfache Operationen zum Erstellen, Lesen, Ändern und Löschen von Daten nutzen
Wie Sie die Leistung Ihrer Abfragen analysieren und einen Index anlegen
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Funktionale Programmierung hat zu guter Letzt auch in Java Einzug gehalten. Es ist jetzt ganz normal, überall mit Lambdas oder mit map() und filter() zu arbeiten. Aber ist das wirklich funktionale Programmierung?
Wie sieht es aus, wenn man Java 8 mit einer althergebrachten funktionalen Programmiersprache vergleicht? Und was kann der Java-Programmierer, der aus der objektorientierten (OO) Entwicklung kommt, von funktionalen Sprachen lernen und in seinen Java-Alltag integrieren?
Auf diese Fragen ging Nicole Rauch in ihrem Referat ein. Ebenso stellte sie die grundlegenden Aspekte er funktionalen Programmierung vor und zeigte auf, was die funktionale Programmierung so besonders macht.
Gerne stellen wir Ihnen die Slides des Referats zur Verfügung.
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungMongoDB
Dies ist das zweite Webinar der Back to Basics-Serie, in dem Ihnen die Datenbank MongoDB genauer vorgestellt wird. In diesem Seminar werden wir Ihnen zeigen, wie Sie in MongoDB eine einfache Blogging-Anwendung erstellen können.
Dieser Vortrag beschäftigt sich mit den Möglichkeiten der Oracle Datenbank und den von Oracle kostenfrei bereitgestellten Werkzeuge zum Austausch von Daten. Dabei wird das Hautpaugenmerk auf das Laden von externen Dateien (z.B. CSV) in eine Oracle Datenbank.
Folgende Werkzeuge werden vorgestellt:
- Data Pump
- SQL Developer
- SQL*Loader
- SQL*Plus / SQLcl
- External Tables
In PostgreSQL kann man sich mit "explain" ansehen, welchen Execution Plan PostgreSQL für eine Query verwendet. Das hilft beim Suchen von Performance Problemen und hilft, den Durchsatz der Database zu steigern.
Beispiel, wie man eine Rails-Webanwendung durch Optimierung der erzeugten Datenbankabfragen besser skalieren kann.
Vortrag ber der Hamburger Ruby-Usergroup am 8.August 2012.
Der Vortrag gibt einen Einblick in die Auszeichnungssprache AsciiDoctor und dem Programm zur Erstellung von Dokumenten im HTML und PDF Format. Es wird beschrieben, wie AsciiDoctor zur Dokumentation in Java (JavaDoc) verwendet werden kann. AsciiDoctor kann in die bekannten Build-Tools Ant, Maven und Gradle integriert werden, so dass die Dokumentation wie Quellcode regelmäßig übersetzt wird. Als Ausblick wird die Integration von "beschreibenden Grafikformatken" wie GraphViz und PlantUML in AsciiDoctor Dokumente gezeigt.
Was kann man machen, um Angular-1.x-Code auf Angular 2 vorzubereiten? Welche Möglichkeiten werden in der nächsten Zeit aufkommen, um einen Parallelbetrieb zu realisieren.
Ähnlich wie Performance trotz Entity Framwork (20)
Mit Xamarin.Forms 4 und Visual Studio 2019 können Sie im Handumdrehen eine eigene App schreiben. In diesem Vortrag und dem zugehörigen Beispielprojekt zeigt Ihnen Microsoft MVP André Krämer, wie es geht. Ausgehend von einer leeren Projektmappe werden Sie live sehen, mit wie wenig Aufwand eine App mit mehreren Bildschirmen entwickelt werden kann. Ein besonderes Augenmerk wird bei der Entwicklung auf dem Einsatz aktueller Xamarin Neuerungen wie z. B. der Shell liegen.
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...André Krämer
Mit ASP.NET Core ist die plattformübergreifende Entwicklung von ASP.NET-Webanwendungen unter Windows, Mac und Linux möglich. Viele Entwickler machen von dieser Option keinen Gebrauch, sondern entwickeln rein unter Windows. Sogar Nutzer von Apple-Geräten starten häufig eine virtuelle Maschine auf Ihrem Mac, sobald sie für ASP.NET entwickeln möchten.
André Krämer machte es lange genauso. Da er den Performanceverlust durch die VM jedoch nicht mehr hinnehmen wollte, beschäftigte er sich damit, wie er seinen Mac konfigurieren muss, um gemeinsam mit seinen Kollegen, die rein unter Windows entwickeln, produktiv an einer ASP.NET-Core- und SQL-Server-Anwendung arbeiten zu können.
In diesem Vortrag berichtet er, wie er sein System konfiguriert hat, welche Hürden es gab und welche Lösungen er gefunden hat, um vollkommen ohne Windows bei gleicher Produktivität in einem gemischten Team mit Windows- und Visual-Studio-Entwicklern arbeiten zu können.
Codewiederverwendung in Xamarin-Apps maximierenAndré Krämer
Microsofts Xamarin Platform ermöglicht die Entwicklung von Apps für Android, iOS und Windows mit nur einem Werkzeug (Visual Studio) und einer Programmiersprache (C#). Da sich die Plattformen im Detail jedoch gehörig unterscheiden, bedeutet dies nicht, dass Sie Ihre Codebasis ohne Änderungen auf allen Plattformen nutzen können. Wie Sie trotz der Unterschiede möglichst viel Code plattformübergreifend wiederverwenden können, wird Ihnen André Krämer in diesem Vortrag zeigen. Dazu wird er die verschiedenen Optionen "Shared Projects", "Portable Class Libraries" und ".NET Standard Libraries" näher erläutern. Darüber hinaus wird er über Dependency Injection sprechen und den Xamarin Dependency Service mit leistungsstarken Inversion-of-Control- Containern wie Autofac vergleichen. Abgerundet wird der Vortrag mit einem Überblick über Xamarin.Essentials, einer Bibliothek, die plattformübergreifende Implementierungen gerätespezifischer Funktionen bietet.
Dank der Xamarin-Plattform können C#-Entwickler Apps für Android – das verbreitetste mobile Betriebssystem – unter Zuhilfenahme bekannter Werkzeuge, Sprachen und Frameworks schreiben. Und genau darum geht es auch in diesem Vortrag. In 60 Minuten werde ich Ihnen erklären, welche Systemvoraussetzungen erfüllt sein müssen, um mit Visual Studio und C# für Android entwickeln zu können und was es mit Activities und Intents auf sich hat. Zu diesem Zweck werde ich live eine kleine App programmieren, die neben einer Multiscreen-Navigation auch lokale Datenhaltung und einiges mehr demonstriert. Den Quellcode gibt es unter https://github.com/AndreKraemer/DWX-2018-Xam-Android-SavedIt
Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...André Krämer
Wer in die App-Entwicklung mit Xamarin einsteigen möchte braucht Geld, Geduld und starke Nerven. Geld, weil für die iOS-Entwicklung ein Mac notwendig ist. Geduld, weil das mehrere Gigabyte umfassende Android SDK inklusive Emulatoren heruntergeladen und installiert werden muss, ehe man auch nur eine Zeile Code für Android übersetzen kann. Starke Nerven, weil es alles andere als intuitiv ist, Mac, XCode, Android und Windows synchron up to date zu halten. Dank des Xamarin Live Players soll damit endlich Schluss sein. Bereits mit einer minimalen Visual-Studio-Installation können Sie – ganz ohne Mac – Xamarin-Apps entwickeln. Wie weit Sie mit dem Player kommen und ab wann Sie doch einen Mac und ein Android SDK benötigen, erfahren Sie in dieser Session.
In den meisten Apps besteht die Notwendigkeit, Daten lokal zu speichern. Dies fängt bei kleinen Datenmengen, wie zum Beispiel Authentication Tokens, an und endet bei größeren Datenmengen, wie beispielsweise offline erfassten Daten, oder gecachten Antworten eines Web-API-Aufrufs. In diesem Vortrag lernen Sie welche Optionen Sie zur lokalen Datenhaltung haben. Sie werden dabei nicht nur erfahren, wo Sie Ihre Daten auf dem Gerät speichern können, sondern anhand praxisnaher Beispiele auch lernen, wann sich ein textbasiertes Format wie JSON oder XML anbietet und wann Sie besser zu einer lokalen Datenbank wie SQLite greifen. Abgerundet wird der Vortrag mit einer Diskussion über den aktuellen Stand der Implementierung des Entity Framework Core auf der Xamarin
Beispiele unter https://github.com/AndreKraemer/XamarinLocalDataAccessDemo
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)André Krämer
Morgens halb zehn in Deutschland: Der Puls Ihrer Anwender ist mittlerweile im dreistelligen Bereich und die ersten User denken ernsthaft darüber nach, den PC aus dem Fenster zu werfen. Ursache: Die von Ihnen entwickelte webbasierte App bremst die Nutzer stets an den entscheidenden Stellen aus. An produktives Arbeiten ist kaum noch zu denken und Überstunden stehen auf dem Tagesprogramm. Doch so weit muss es gar nicht kommen. Glückliche Anwender sind nur wenige Handgriffe entfernt. Und genau diese Handgriffe, wird Ihnen André Krämer in diesem Vortrag zeigen. Gemeinsam werden wir den Ursachen langsamer Web- und Mobile-Apps in den Bereichen JavaScript, CSS und Co. auf den Grund gehen und diese Schritt für Schritt eliminieren.
.NET Datenzugriff einfach und performant mit Micro O/R Mappern André Krämer
O/R Mapper, wie Microsofts Entity Framework oder NHibernate, haben enorm dazu beigetragen, den Datenzugriff in .NET-Applikationen für Entwickler zu vereinfachen. Ein wenig Linq genügt und schon "fliegen" die Daten aus der Datenbank in die Objekte im Quellcode. Doch was im Quellcode noch gut aussieht, lässt den Datenbankadministrator schaudern, sobald er einen Blick auf das automatisch generierte SQL-Statement wirft. All zu leicht schleichen sich nämlich Fehler ein, die zu unperformanten SQL-Statements führen. Und das alles nur, um Daten in Objekte zu packen. In dieser Session erfahren Sie, dass es auch anders geht. Mit dem Einsatz so genannter Micro ORMs, wie NPoco, haben Sie die Möglichkeit, hoch optimierte SQL-Statements gegen Ihre Datenbank abzufeuern und das Ergebnis automatisch in POCO-Klassen zu packen. Natürlich verlieren Sie dabei auch einige Features der "großen" ORMs. Welche das sind und ob Sie diese wirklich brauchen, zeige ich Ihnen in diesem Vortrag.
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
Wenn Sie sich Beispielcode im MSDN ansehen, dann wird Eines ganz schnell klar: Wer einen O/R-Mapper wie das Entity Framework oder NHibernate einsetzt, der sollte ihn mit dem Repository Pattern paaren. Idealerweise sogar mit generischen Repositories. Schließlich können Sie nur so den O/R-Mapper Ihrer Wahl vor den darüber liegenden Schichten verbergen. Aber ist dieses Versteckspiel vorteilhaft? Wie sinnvoll ist es wirklich, höhere Schichten bewusst dumm zu halten? Und gewinnen Sie auch Flexibilität durch diese Herangehensweise? Genau um diese Fragen geht es in diesem Vortrag. Anhand einiger Praxisbeispiele werden wir uns im Vergleich zu den typischen MSDN-Anwendungen ansehen, ob das Repository Pattern tatsächlich seine Berechtigung hat.
Zentrale Dokumentengenerierung mit dem Open XML SDKAndré Krämer
Ob Rechnung, Teilnahmebescheinigung, Urlaubsantrag, Tätigkeitsnachweis oder Artikelstückliste: Heutzutage gibt es unzählige standardisierte Dokumente, die Tag für Tag in Unternehmen erstellt werden. Dass die manuelle Erzeugung keine Alternative ist, dürfte jedem klar sein. Schließlich bindet sie unnötige Ressourcen und ist fehleranfällig. Doch wie sieht die Alternative aus? VSTO oder sogar Word Automatisierung, so wie man es in den 90ern gemacht hat? In diesem Vortrag werden Sie eine weitere Alternative für die serverseitige Dokumentengenerierung kennen lernen: Das Microsoft Office Open XML SDK. Nach einem kurzen Überblick über den Aufbau und den Funktionsumfang des SDKs werden Sie Anhand von praxisnahen Live Demos erfahren, wie Sie kostenlos Word Kompatible (*.docx) Dokumente erzeugen können. Dabei werden Sie jedoch nicht nur erfahren, was alles geht, sondern auch wo die Grenzen sind.
11. „if you’re writing ADO.Net code by hand, you’re
stealing from your employer or client.”
Jeremy D. Miller, 7. November 2008,
http://codebetter.com/jeremymiller/2008/11/07/how-to-design-your-data-connectivity-strategy/
16. OR-Mapper
• Abstrahieren die Datenbank für uns
• Erlauben einen objektorientierten Zugriff auf die Datenbank
• Lassen uns unsere gewohnte Programmiersprache nutzen
• „Schützen(?)“ uns davor SQL schreiben zu müssen
• Sparen Entwicklungszeit
25. Messen Sie statt zu raten!
http://hibernatingrhinos.com/products/EFProf
26. Legen Sie eine ausreichende Menge an
realistischen Testdaten an
26http://www.red-gate.com/products/sql-development/sql-data-generator/
27. Laden Sie nicht mehr Daten als benötigt
using (var db = new NorthwindDb())
{
var products = db.Products;
foreach (var product in products)
{
Console.WriteLine("{0}",
product.ProductName);
}
}
SELECT [Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[SupplierID] AS [SupplierID],
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[QuantityPerUnit] AS
[QuantityPerUnit],
[Extent1].[UnitPrice] AS [UnitPrice],
[Extent1].[UnitsInStock] AS [UnitsInStock],
[Extent1].[UnitsOnOrder] AS [UnitsOnOrder],
[Extent1].[ReorderLevel] AS [ReorderLevel],
[Extent1].[Discontinued] AS [Discontinued]
FROM [dbo].[Products] AS [Extent1]
28. Laden Sie nicht mehr Daten als benötigt
(Lösung)
var products = db.Products.Select(p
=> new {p.ProductName});
foreach (var product in products)
{
Console.WriteLine("{0}",
product.ProductName);
}
SELECT 1 AS [C1],
[Extent1].[ProductName] AS [ProductName]
FROM [dbo].[Products] AS [Extent1]
28
29. Laden Sie „Readonly Daten“ nicht in den
Change Tracker
var shippers = db.Shippers.ToList();
for (int i = 0; i < 200 && i <
shippers.Count; i++)
{
var shipper = shippers[i];
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
var shippers =
db.Shippers.AsNoTracking().ToList();
for (int i = 0; i < 200 && i <
shippers.Count; i++)
{
var shipper = shippers[i];
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
29
30. Laden Sie nur die Zeilen, die Sie wirklich
benötigen
var shippers = db.Shippers.ToList();
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0} - {1}",
shippers[i].ShipperID,
shippers[i].CompanyName);
}
var shippers =
db.Shippers.Take(10).ToList();
foreach (var shipper in shippers)
{
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
30
31. Filtern Sie auf dem Server, nicht auf dem
Client
var customers = GetCustomers(db).Where(c =>
c.Country == "Germany");
foreach (var customer in customers)
{
Console.WriteLine("{0} - {1}",
customer.CustomerID, customer.CompanyName);
}
private IEnumerable<Customers>
GetCustomers(NorthwindDb db)
{
return db.Customers;
}
var customers = GetCustomersQry(db).Where(c
=> c.Country == "Germany");
foreach (var customer in customers)
{
Console.WriteLine("{0} - {1}",
customer.CustomerID, customer.CompanyName);
}
private IQueryable<Customers>
GetCustomersQry(NorthwindDb db)
{
return db.Customers;
}
31
32. Lassen Sie sich nicht durch die Intellisense in
falsche Richtungen leiten
var shippers =
db.Shippers.ToList().Take(10);
foreach (var shipper in shippers)
{
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
var shippers =
db.Shippers.Take(10).ToList();
foreach (var shipper in shippers)
{
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
32
33. Nutzen Sie Find Statt SingleOrDeafault um
Entitäten aus dem Cache zu laden
var s1 =
db.Shippers.SingleOrDefault(c =>
c.ShipperID == 1);
Console.WriteLine("S1: {0} - {1}",
s1.ShipperID, s1.CompanyName);
var s2 =
db.Shippers.SingleOrDefault(c =>
c.ShipperID == 1);
Console.WriteLine("S2: {0} - {1}",
s2.ShipperID, s2.CompanyName);
var shippers =
db.Shippers.Take(10).ToList();
foreach (var shipper in shippers)
{
Console.WriteLine("{0} - {1}",
shipper.ShipperID,
shipper.CompanyName);
}
33
34. Laden Sie nicht zum Löschen
var maxShipperId = db.Shippers.Max(s
=> s.ShipperID);
var shipper =
db.Shippers.Find(maxShipperId);
db.Shippers.Remove(shipper);
db.SaveChanges();
var maxShipperId = db.Shippers.Max(s
=> s.ShipperID);
// db.Shippers.Find(maxShipperId);
var shipper = new Shippers {ShipperID
= maxShipperId};
db.Shippers.Attach(shipper);
db.Shippers.Remove(shipper);
db.SaveChanges();
34
35. Behalten Sie Lazy Loading im Auge
var orders = db.Orders.ToList();
foreach (var order in orders)
{
Console.WriteLine("{0} {1}",
order.OrderID,
order.Customers.CompanyName);
}
var orders = db.Orders.Include(o=>
o.Customers).ToList();
foreach (var order in orders)
{
Console.WriteLine("{0} {1}",
order.OrderID,
order.Customers.CompanyName);
}
35
36. Annotieren Sie Ihr Model korrekt (Im Fall
von Code First)
• public string PreferedCommunication { get; set; }
wird zu nvarchar(max) in der Datenbank!
• [StringLength(50)]
public string PreferedCommunication { get; set; }
wird zu nvarchar(50) in der Datenbank
modelBuilder.Entity<Customers>()
.Property(e=> e.PreferedCommunication)
.IsUnicode(false);
varchar statt nvarchar
36
38. Sie haben ein Performance oder
Speicherproblem in Ihrer Anwendung?
Im Rahmen meiner Beratertätigkeit betreue ich seit vielen Jahren Kunden rum um die
Themen Datenzugriffsperformance, Anwendungsperformance und Memory Leak
Analysen.
Kommen Sie bei Bedarf gerne auf mich zu:
andre@andrekraemer.de | http://andrekraemer.de
38
39. Meine Dienstleistungen
• Schulungen
• ASP.NET / JavaScript / AngularJS
• Xamarin
• Cordova
• TX Text Control
• Infragistics NetAdvantage
• Team Foundation Server
• .NET Datenzugriff (Entity Framework, NHibernate, Micro O/R Mapper)
• Consulting
• Durchführung von Technologieworkshops
• Code- / Architekturreviews
• Analyse von managed Memory Leaks
• Prototypenentwicklung
• Remote Entwickler-Support
• Projektbegleitendes Coaching
• Softwareentwicklung
• Mobile Apps (Android, iOS, Windows 10, Windows 8, Windows Phone)
• Entwicklung von Web-Anwendungen mit ASP.NET und AngularJS
• Entwicklung von Desktop Anwendungen
39andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer
Hinweis der Redaktion
Das bedeutet, dass wir in 30 % unserer Arbeitszeit keinen Mehrwert in der Form von Benutzer-Features für unser eigentliches Produkt welches wir entwickeln schaffen können, sondern damit beschäftigt sind Infrastrukturcode zu schreiben.
Natürlich ist dies keine wirklich gute Idee, denn Datenzugriff - oder Persistenz - ist ein gelöstes Problem. ..