Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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
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 …
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
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
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
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
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
36
Test s provedením 100 dotazů SqlClient Entity SQL LINQ to Entities
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.