Entity Framework
Code First

ORM mapper z dílny Microsoftu

Petr Šnobelt / @petrsnobelt

Další DAL od Microsoftu!?

  • ADO.NET
    • DataReader, DataTables
  • DataSets
  • TypedDataset
  • SqlDataSource

Microsoft ORM mapper

Entity Framework (EF) is an object-relational mapper that enables .NET developers to work with relational data using domain-specific objects. It eliminates the need for most of the data-access code that developers usually need to write.
  • přímá konkurence NHibernate
  • první pokus LinqToSQL 2007
  • první verze EntityFramework 2008
  • EntityFramework Code First 2011
  • EntityFramework v6.1 2013

Development Stack

  • DAL
    • Entity Framework
  • Bussiness Logic
    • ASP.NET WebAPI
  • UI
    • ExtJS (Ext.NET) pro LOB aplikace
    • PureJS, Bootstrap, ReactJS pro specialitky a mobilní věci

Výhody I/II

Down arrow
  • Code/Type Safety, Refaktoring
  • Rapid application development and prototyping
  • Unit testing
  • Open source
  • Conventions over configurations
  • Support for legacy db

Výhody II/II

  • supported and developed by Microsoft (#EFHelp)
  • funguje výborně s ostatními ms technologiemi
  • existují i providery pro Oracle, Firebird, NuoDB, MySQL

Použité technologie a návrhové vzory

  • Nevyužívá Repository ani ActiveRecord
  • Využívá Unit of work
  • Lazy load
  • LINQ

LINQ

Language INtegrated Query - je silně typový jazyk pro dotazování

  • Nejlepší věc v .NETu (uveden v 3.5) za poslední dobu
  • Koncept z funkcionálního jazyka
    • neříkáme jak, ale co chceme udělat
    • vyšší výkon díky paralelizaci a zlepšení kompilátoru
  • Nehrozí SQL injection
  • LazyLoad, Deferred execution by default
  • Jednoduché úkoly třízení, selekce
  • Nalezení duplicitních souborů
  • A fully LINQified RayTracer
  • Linq to everything
    • Linq To Objects, Excel, CSV, ActiveDirextory, XML, Lucene, JSON

Způsoby konfigurace

  • Attributes
  • FluentAPI
  • Custom Conventions
  • Konfigurace
    • web.config, app.config
  • NHibernate - xml konfigurace

Demo

Co takhle demo?

Demo

  1. všechno jde naházet do jednoho projektu
  2. ale my si to pěkně rozdělíme do projektů podle jejich určení
  3. pokusím se o TDD

Notes

  • Instalace Packages EntityFramework.SqlServerCompact
  • První test - uložení blogu
  • Uprava app.config - přidání connection stringu
  • Zobrazení vygenerované databáze
    • Existuje tabulka Posts i přesto že není v DataContextu
    • nvarchar(max), nullable
  • Druhý test - prázdný blog
  • Změnila se databáze - initializer
  • Expected exception ...
  • Uprava StringLength
  • Ukázka fluentapi
  • BlogPost - Initializer, virtual (proxy)
  • BeyondBasics
    • přidáme si nějaké data navíc
    • logging sql
    • deferred execution
    • egger loading

Co se do dema nevešlo

Změny schema databáze

  • Ve fázi prototypu/testování DdInitializer
  • Po nasazení - CodeFirst Migrations
  • AutoMapper pro přenášení mezi DAL a BO

Problémy

  • Linq kod je předán provideru a ten z něj vytvoří nativní dotaz
    • provider může vyhodit exception - např String.Format
  • LazyLoad - dobrý sluha ...
  • Nelze jednoduše napsat znovupoužitelné dotazy na kalkulované vlastnosti

Alternativy, výkon

EF není nejrychlejší ORM mapper pro .NET

výkon se dá zlepšit použitím storedprocedures

pokud jdete po výkonu zkuste Daper, PetaPoco

pokud chcete něco jednoduchého massive

Resumé

  • Hodí se na dlouhodobé projekty
    • oceníte migrace
    • typovou bezpečnost - refaktoring
    • testovatelnost
  • V kombinaci s WebApi lze vytvořit REST api, které umí výborně spolupracovat s js knihovnami
    • Angular (Google)
    • ExtJS (Sencha)
    • ReactJS (facebook)

Děkuji za pozornost

Otázky?


Petr Šnobelt
petr.snobelt@gmail.com
@petrsnobelt