Sie sind auf Seite 1von 36

Advanced

Data Access Patterns


Jörg Neumann
Jörg Neumann
 Principal Consultant bei Acando
 Associate bei Thinktecture
 MVP im Bereich „Client App Dev“
 Beratung, Schulung, Coaching
 Buchautor, Speaker
 Mail
– Joerg.Neumann@Acando.de
– Joerg.Neumann@thinktecture.com
 Blog
– www.HeadWriteLine.BlogSpot.com
Data Access Tag Cloud

Transactions O/R Mapping Identity


Stored Procedures Mobile Data Access
Multiple Resultsets Validation Change Tracking
N-Tier Data Access Concurrency
Asynchron Operations Offline Support
Provider Independant Data Access Caching
Notifications Data Binding Synchronization
Data Technology Cloud

LINQ to SQL Entity Framework REST


DbProviderFactory Typed DataSets Entity Model

ADO.NET Data Services IDataErrorInfo


Asynchron DataReader SqlDependency eSQL

SQL Server Compact Edtion MARS DataView

ADO.NET Synchronization Services


Agenda
 Asynchroner Datenzugriff
 Transaktionen
 Lokales Caching
 O/R-Mapping
Asynchroner Datenzugriff
 Parallele Zugriffe in separaten Threads
 UI friert nicht ein
 Support in SQL Server
– MARS (Multiple Active Resultsets)
 Support in ADO.NET
– Async Pattern
Asynchoroner Zugriff (SQL Server)
 Connection String
– MultipleActiveResultSets=True
– Asynchronous Processing=True
 SqlCommand
– BeginExecuteReader() / EndExecuteReader()
– BeginExecuteXmlReader()/EndExecuteXmlReader()
– BeginExecuteNonQuery() / EndExecuteNonQuery()
 UI-Operationen synchronisieren
– SynchronizationContext
Transaktionen
 Herausforderungen
– Locks mindern die Skalierbarkeit!
– Performance Overhead
 Client- vs. Server-seitige Transaktionen
– Round Trips
– Stored Procedures sind meist die bessere Wahl
System.Transactions
 Explizites Modell
– CommitableTransaction
– SqlConnection.EnlistTransaction()
 Implizites Modell
– TransactionScope
– Connection enlisted sich automatisch
 Connection String
– Enlist=true
– Transaction Binding=Explicit Unbind
Lokales Caching
 Skalierbarkeit
– Nicht alle Daten müssen vom Server bezogen
werden
 Performance
– Bessere Antwortzeiten
 Offline-Fähigkeit
– Anwendung kann offline betrieben werden
Datenklassen
 Referenzdaten
– Katalogdaten, Lookup-Tabellen
 Aktivitätsdaten Geeignet für
– Bestellungen, Warenkörbe lokales Caching
 Service-Interaktionsdaten
– Bestellformular
 Ressourcedaten
– Kunden, Lieferanten
Lösungsansätze
 Web
– ASP.NET Infrastruktur
 Desktop
– Synchronization Services for ADO.NET
– Support in Visual Studio 2008
 SQL Server
– SQL Server Compact Edition
Lokales Caching

Referenzdaten

Datenbank
(SQL Server)

Lokaler Cache
(SQL CE)
Lokales Caching – N-Tier

Referenzdaten

Middle Tier
Datenbank
(SQL Server)

Lokaler Cache
(SQL CE)
O/R Mapping
 Pro
– Volle Typisierung
 Contra
– Mapping Overhead
– Performance
 Frameworks
– LINQ to SQL
– Entity Framework
–…
State Manager

Database

Client
State Manager
Change Set

Customer Customer
Customer Customer
Customer Customer
Customer Order
State Manager in N-Tier
Database

Client Customer Service


State Manager
Change Set
Proxy-Objekte

Kein Change Customer


Customer
Customer
Customer
Tracking! Customer Customer
Customer Customer
LINQ to SQL & Entity Framework
 Change Tracking
– ChangeSet kann nicht serialisiert werden
– Objekte müssen in Middle Tier „attached“ werden
– Objekte müssen manuell auf „dirty“ gesetzt
werden
– Full Concurrency nur schwer möglich
Technology Shoot-Out

Datenbindung
Multi RDBMS

Produktivität
Performance
Undo/Redo

Typisierung
SP-Support

Komplexe
Modelle
Support

Interop
Offline
N-Tier
2-Tier

Untyped ●●●
● ●● ●● ●●● ●1 ●● ● ●
Datasets ●
Typed
● ● ●● ●● ●1 ●● ● ●●● ● ●●
Datasets
LINQ to ●
● ● ●● ● ●● ●● ●2 ●● ●
SQL
Entity ●
● ● ● ● ● ●● ●●● ●● ●● ●●
Framework
ADO.NET
Data ●●● ● ● ● ● ●●● ●● ●● ●●●
Services
1 Nur einfaches Undo, kein Redo
2 Vererbung, aber Entität muss Tabelle entsprechen
Weitere Herausforderungen
 Data Binding
– LINQ
 Ergebnismengen haben kein Change Tracking!
– Kein dynamisches Sortieren und Filtern möglich
 Client-seitige Transaktionen
– Kein Undo/Redo
– Kein System.Transaction Support
Client Support
 thinktecture.DataObjectModel
– Freeware (joerg.neumann@thinktecture.com)
 Einsatzgebiete
– Verteilte Anwendungen
– Custom Data Contracts
– Ideal als Objekt-Fassade auf Clientseite
– WinForms, WPF, ASP.NET
 Limitationen
– Kein O/R-Mapping
Features
 Change Tracking
– Serialisierbar
– Offline Support
 Full Concurrency Support
– Original Values
 Erweitertes Data Binding
– IDataErrorInfo-Support für Client-seitige
Validierung
 Unbegrenztes Undo/Redo
Features
 System.Transaction Support
 Support für Objektgraphen
 Generische View-Klasse
(analog zu DataView)
 String-basiertes Filtern/Sortieren/Suchen zur
Laufzeit
 Transparent Proxy Factory für Interop-
Szenarien
Architektur
DataObject DataObjectList<T> DataView<T>
Change Tracking Change Tracking Custom Views
Undo/Redo Undo/Redo Filter
Data Binding Data Binding Sort
Transactions Search
Column Customizing

Customer
Alternativ

DataObject DataObjectList<T> DataView<T>

ProxyFactory

Erzeugt Object
Proxies

DataObject Proxy
Transparent Proxy
Customer
Funktionen von
DataObject Leitet Änderungen weiter
Props von Customer
{ In-depth support and consulting for
software architects and developers }
http://www.thinktecture.com/

joerg.neumann@thinktecture.com
www.HeadWriteLine.BlogSpot.com

36
Ressourcen
 ADO.NET Team Blog
– http://blogs.msdn.com/adonet/default.aspx
 Entity Framework Design Blog
– http://blogs.msdn.com/adonet/default.aspx
 ADO.NET Data Services Team Blog
– http://blogs.msdn.com/astoriateam
 Project Pegasus (Entity Bag)
– http://code.msdn.microsoft.com/entitybag
Ressourcen
 ADO.NET Team Blog
– http://blogs.msdn.com/adonet/default.aspx
 Entity Framework Design Blog
– http://blogs.msdn.com/adonet/default.aspx
 ADO.NET Data Services Team Blog
– http://blogs.msdn.com/astoriateam
 Vergleich zwischen LINQ to SQL & EF
– http://blogs.msdn.com/swiss_dpe_team/archive/2008/
11/06/entity-framework-vs-linq-to-sql.aspx
Entity Framework Provider
 Open Link Virtuoso Data Provider
– Oracle (7.x - 11.x)
– Microsoft SQL Server (6.x - 2005)
– IBM DB2, IBM Informix (5.x - 11.x)
– Sybase (4.2 - 12.x)
– Ingres (6.4 - 9.x)
– Progress (7.x - 10.x)
– MySQL, PostgreSQL, Firebird
 Quelle:
http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtAdoNet35Provider
Weitere EF Provider
 Core Lab (Oracle, MySQL,Postgre,…)
 IBM (IBM DB2, Informix)
 MySQL AB (MySQL)
 Npgsql (PostgreSQL)
 Phoenix Software (SQLite)
 Sybase (SQL Anywhere)
 VistaDB Software (VistaDB)
 DataDirect (Oracle, Sybase, DB2
 Firebird (Firebird)
EF Providers
 Liste der aktuell verfügbaren Provider
– http://msdn.microsoft.com/en-
us/data/dd363565.aspx