René Leupold Patrick Weibel - NET User Group Bern
René Leupold Patrick Weibel - NET User Group Bern
René Leupold Patrick Weibel - NET User Group Bern
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
.<strong>NET</strong><strong>User</strong><br />
<strong>Group</strong><br />
<strong>Bern</strong><br />
<strong>René</strong> <strong>Leupold</strong><br />
<strong>Patrick</strong> <strong>Weibel</strong><br />
www.dnug-bern.ch<br />
Follow dnugbe on twitter
DNUG <strong>Bern</strong> Sponsoren
Über <strong>René</strong> <strong>Leupold</strong><br />
• connect@databinding.net (live)<br />
• http://www.databinding.net<br />
• CV siehe Xing ;-)
Über <strong>Patrick</strong> <strong>Weibel</strong><br />
• network@eweibel.net<br />
• http://blog.eweibel.net<br />
• twitter.com/pweibel<br />
• CV siehe Xing
Vorbereitung reicht für mehr<br />
• Einmal mehr den Rotstift angesetzt
Agenda<br />
• Abfragen<br />
• Lazy und Eager Loading<br />
• Debugging/Profiling<br />
• Optimierung<br />
• Concurrency<br />
• Auditing<br />
• Validierung<br />
• Caching
Abfragen<br />
-Alle Produkte<br />
- Hardcover Gewicht > 100<br />
-Orders mit Ebook<br />
-Order KPI
Abfragen<br />
Entity Framework<br />
• eSQL<br />
• ExecuteStoreCmd./Query<br />
• Linq<br />
• SQL Injection<br />
• Besonderheiten Abfrage<br />
(ToList)<br />
NHibernate<br />
• HQL<br />
• Native SQL<br />
• Linq<br />
• Criteria Queries<br />
• Named Queries<br />
• NH 3 QueryOver
Lazy-/Eager-Loading
Lazy-/Eager-Loading<br />
Entity Framework<br />
• Default Lazy<br />
• Explizit Include<br />
• Nachladen<br />
– LoadReference<br />
– LoadProperty<br />
• Eager<br />
– Kontext Property Lazy =<br />
false<br />
NHibernate<br />
• Default Lazy<br />
• Mapping (fetch)<br />
• Criteria (FetchMode)<br />
• Linq (Expand)<br />
• Nachladen<br />
– NHibernateUtil.Initialize()<br />
• Eager<br />
– lazy = false
Debugging/Profiling
Debugging/Profiling<br />
Entity Framework<br />
• SQL Profiler<br />
• EFProfiler<br />
• EFTracingProvider<br />
– Ermöglicht SQL-Korrektur<br />
• Log4Net mit<br />
ToSQLTraceString<br />
NHibernate<br />
• SQL Profiler<br />
• NHProfiler<br />
• Log4Net<br />
• show_sql=true
Optimierung am Beispiel<br />
-2 Varianten<br />
-Design optimieren<br />
-Komponenten wechseln<br />
Für jedes Projekt<br />
eine andere Komponente?
Optimierungsgründe<br />
• SELECT N + 1<br />
• Grosse Datenmengen<br />
• Zu viele JOINS<br />
• Batch-Processing<br />
• Blob<br />
• Falsche Strategie
Optimierung<br />
Entity Framework<br />
• ViewGeneration<br />
• CompiledQuery<br />
• DefiningQuery<br />
• 2nd Level Cache<br />
• Paging<br />
• Query-Optimierung<br />
NHibernate<br />
• Fetching-Optimierung<br />
• Query Cache<br />
• First-Level Cache opt.<br />
– Evict()<br />
• 2nd Level Cache<br />
• Paging<br />
• Query-Optimierung
Concurrency
Concurrency<br />
Entity Framework<br />
• Optimistic<br />
• Pessimistic<br />
NHibernate<br />
• Optimistic<br />
• Pessimistic
Auditing
Auditing<br />
Entity Framework<br />
• SavingChanges()<br />
• T4-Anpassungen bei STE<br />
• Aber auch<br />
– Möglichkeiten der DB<br />
nutzen<br />
NHibernate<br />
• Interceptor<br />
• Listener
Validierung
Validierung<br />
Entity Framework<br />
• DataAnnoations<br />
• IErrorInfo<br />
• IValidate<br />
• Custom<br />
NHibernate<br />
• DataAnnoations<br />
• IErrorInfo<br />
• IValidate<br />
• IValidateable<br />
• Regeln auf DB nicht<br />
vergessen
Caching
Caching (2nd-Level)<br />
Entity Framework<br />
• EFCachingProvider<br />
NHibernate<br />
• NHibernate.Caches.*<br />
– Prevalance<br />
– SysCache<br />
– SysCahce2<br />
– MemCache
Model First/Code First?<br />
Entity Framework<br />
• Model First<br />
• Code First<br />
• Model Code First ;-)<br />
NHibernate<br />
• Visual Designer
Fragen und Diskussion
Ausblick<br />
• Dritter Vortrag, wenn Interesse besteht<br />
– Wünsche im Xing-Forum anmerken<br />
• dnug be Screencast tv