Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Petr Puš SW Architekt Unicorn a.s. Microsoft C# MVP.

Podobné prezentace


Prezentace na téma: "Petr Puš SW Architekt Unicorn a.s. Microsoft C# MVP."— Transkript prezentace:

1 Petr Puš SW Architekt Unicorn a.s. Microsoft C# MVP

2 O-R Mapování a.NET Představení ADO.NET EF Vlastnosti a možnosti Práce s referencovanými entitami Mapování dědičnosti Výkon Srovnání s ostatními technologiemi

3

4 Relační databáze Tabulky, relace,.. Aplikační vrstva Objekty, asociace, dědičnost, … Možnost pracovat s relačními daty jako s objekty Tabulky => Třídy Řádky => Instance tříd Sloupce => Vlastnosti instancí tříd Relace => Asociace mezi třídami Možné simulovat dědičnost

5 Produktivita Není potřeba starat se o persistenci dat Je možné soustředit se pouze na aplikační logiku Udržovatelnost Je potřeba méně řádek zdrojového kódu Entity mapují obchodní problematiku Menší náchylnost na změny – refactoring Nezávislost na konkrétním RDBMS Odstínění od specifických SQL příkazů

6 Dlouhou dobu podpora pouze relačního přístupu Připojené ADO.NET DataSety Data access app. block v Enterprise library Nutné použít komponentu třetí strany nHibernate iBatis

7 LINQ to SQL od.NET FW 3.5 První oficiální jednoduchý O-R mapper Podpora LINQ Vhodné spíše pro menší aplikace Mapování přímo ve zdrojovém kódu (atributy) Omezení designeru ve VS 2008 Podpora pouze pro MS SQL …

8

9 Plnohodnotný O-R mapper pro.NET FW Více možností než LINQ to SQL Součást.NET FW 3.5 SP1 Pohodlný designer pro EF – VS 2008 SP1 Zjednodušení implementace práce s daty

10 Mapování definováno v XML souborech Aplikační kód pracuje pouze z vrstvou entit Podpora jakéhokoli RDBMS Postaveno na konceptu ADO.NET providerů Provider musí podporovat EF Podpora LINQ Pokročilé techniky mapování Podpora uložených procedur ve formě typových wrapperů

11 Mapování je vyjádřeno 3 XML soubory CSDL Popis konceptuálního modelu SSDL Popis úložiště (DB) MSL Popis mapování mezi úložištěm a konceptuálním modelem

12 Ve VS 2008 práce pouze se soubory *.edmx Použití vizuálního designéru Při kompilaci vytvoření CSDL, SSDL, MSL souborů Možnosti uložení mapovacích souborů Embedded resource Přímo v aplikační složce

13 Tvorba modelu entit ve VS 2008 SP1

14

15 ADO.NET entity provider Speciální ADO.NET provider Entity client Typy EntityConnection, EntityCommand,… Použití Entity SQL (eSQL) Netypový přístup k entitám Přístup pouze pro čtení Velice rychlý přístup k datům

16 ObjectContext a eSQL Použití typu ObjectContext Použití Entity SQL (eSQL) Typový přístup k entitám (ObjectResult ) LINQ to Entities Použití typu ObjectContext Použití LINQ nad konceptuálním modelem Typové datové dotazy Typový přístup k entitám Velice efektivní

17 Entita složená z dat více tabulek Komplexní vlastnosti Použití uložených procedur na aktualizaci dat Asociace 1.. 1 1.. N M.. N Dědičnost

18

19 Dotazovací jazyk na bázi SQL rozšířený o podporu entit Rozšíření : VALUE, REF, DEREF, OFTYPE, … Překládán do nativního SQL databáze použitím služeb ADO.NET provideru Možné tvořit polymorfické dotazy Podpora řádků i entit Vhodný pro tvorbu dynamických dotazů SELECT VALUE p FROM DBEntities.Product AS p

20 Namespace System.Data.EntityClient Pro čtení dat EntityDataReader Implementace čtení se liší na základě eSQL dotazu (řádek, entita, reference, …) EntityConnection connection = new EntityConnection("name=EntityFrameworkDBEntities"); string eSql = "SELECT VALUE p FROM EntityFrameworkDBEntities.Product as p"; connection.Open(); EntityCommand command = connection.CreateCommand(); command.CommandText = eSql; EntityDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read()) { Console.WriteLine(reader["name"]); } connection.Close(); EntityConnection connection = new EntityConnection("name=EntityFrameworkDBEntities"); string eSql = "SELECT VALUE p FROM EntityFrameworkDBEntities.Product as p"; connection.Open(); EntityCommand command = connection.CreateCommand(); command.CommandText = eSql; EntityDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read()) { Console.WriteLine(reader["name"]); } connection.Close();

21 Implementace přístupu k datům pomocí Entity client

22 Zpřístupňuje data formou silně typových CLR tříd Řeší problémy konkurenčního přístupu Podpora pro datové vázání na visuální prvky Třída ObjectContext Možné použít Entity SQL nebo LINQ using (SampleDBEntities context = new SampleDBEntities()) { var query = context.CreateQuery ("SELECT VALUE p from Person as p"); var result = query.Execute(MergeOption.AppendOnly); foreach (Person per in result) { Console.WriteLine("{0} - {1}", per.Name, per.GetType().Name); } using (SampleDBEntities context = new SampleDBEntities()) { var query = context.CreateQuery ("SELECT VALUE p from Person as p"); var result = query.Execute(MergeOption.AppendOnly); foreach (Person per in result) { Console.WriteLine("{0} - {1}", per.Name, per.GetType().Name); }

23 Implementace přístupu k datům pomocí Object services

24 Implementace LINQ pro ADO.NET EF Umožňuje tvorbu datových dotazů v.NET jazyce Typová kontrola Intellisense Možné použít volání.NET metod using (SampleDBEntities context = new SampleDBEntities()) { var query = from prod in context.Product where prod.Name.ToUpper() == "HOUSKA" select prod; foreach (ProductEntity product in query) { Console.WriteLine("{0} ({1})", product.Name, product.Category.Name); } using (SampleDBEntities context = new SampleDBEntities()) { var query = from prod in context.Product where prod.Name.ToUpper() == "HOUSKA" select prod; foreach (ProductEntity product in query) { Console.WriteLine("{0} ({1})", product.Name, product.Category.Name); }

25 Implementace přístupu k datům pomocí LINQ to Entities

26

27 EF nepodporuje lazy-loading Na získání referencovaných entit je potřeba myslet v kódu (!) Explicit loading Zavolání metody Load na objektu reference Eager loading Uvedení v dotazu, které ref. entity se mají nahrát Metoda Include

28 Explicit loading Eager loading if (!product.CategoryReference.IsLoaded) { product.CategoryReference.Load(); } if (!product.CategoryReference.IsLoaded) { product.CategoryReference.Load(); } var query = from prod in context.Product.Include("Category") select prod; var query = from prod in context.Product.Include("Category") select prod;

29 Práce s referencovanými entitami

30

31 Simulace OOP dědičnosti nad relačními daty Podpora polymorfických dotazů Hloubka dědičnosti není omezena Lze vyjádřit pomocí vizuálního designéru Možný výběr strategie uložení Table-per-Type Table-per-Hierarchy A a1 B b1 C c1

32 Table-per-Hierarchy Jedna tabulka pro hierarchii tříd Použivá se sloupec „discriminator“ Rozpoznání, jaký typ entity je v řádku uložen Velice rychlé dotazy Sloupce pro atributy specializovaných tříd nejsou vždy využity A * id a1 b1 c1

33 Table per subclass Každá třída – vlastní tabulka obsahující pouze sloupce pro speciální atributy třídy Jeden záznam má stejné ID ve všech tabulkách hierarchie Vhodné i pro větší stromy dědičnosti A * id B C a1 b1c1

34 Implementace dědičnosti

35

36 Test s provedením 100 dotazů SqlClient Entity SQL LINQ to Entities

37

38

39 ADO.NET EF + Mapování v XML Nezávislost na DB Bohatší možnosti mapování Dědičnost Asociace M:N Více tabulek do entity LINQ to SQL + Jednodušší na použití Podpora lazy-loading pro asociované entity Podpora lazy-loading pro jednotlivé vlastnosti entity

40 ADO.NET EF + Podpora LINQ Integrovaný designer ve VS 2008 SP1 Jednodušší vývoj Oficiální MS technologie Typové volání uložených procedur nHibernate + Větší konfigurovatelnost Třídy entity v separátních souborech (assembly) Podpora lazy-loading Typová nezávislost tříd entit Logování nativního SQL Lepší podpora mapování dědičnosti …

41 LINQ to SQL (.NET FW 3.5) Jednoduchý typový wrapper na DB Vhodný pro jednoduché aplikace nad MS SQL Velice rychlý vývoj ADO.NET ENTITY FW (.NET FW 3.5 SP 1) Použitelný O-R mapper Vhodný pro „středně velké“ aplikace Efektivní vývoj (Designer, LINQ to Entities) nHibernate (.NET FW 1.1 +) O-R mapper s nejvíce možnostmi Vhodný pro enterprise aplikace Těžkopádnější vývoj

42 O-R Mapování a.NET Představení ADO.NET EF Vlastnosti a možnosti Práce s referencovanými entitami Mapování dědičnosti Výkon Srovnání s ostatními technologiemi

43

44


Stáhnout ppt "Petr Puš SW Architekt Unicorn a.s. Microsoft C# MVP."

Podobné prezentace


Reklamy Google