Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

ENTITY FRAMEWORK Török János Zsolt

Hasonló előadás


Az előadások a következő témára: "ENTITY FRAMEWORK Török János Zsolt"— Előadás másolata:

1 ENTITY FRAMEWORK Török János Zsolt

2 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

3 Az alapprobléma  Az üzleti alkalmazások nagy része relációs adatbázisban tárolja az adatokat  Legalább két különböző nyelv (C# and SQL)  Különböző szintaxis  Különböző típusok  Különböző eszközök  Különböző paradigmák: objektum orientált vs. procedurális  Valamint meg kell tanulni az API-t ami összeköti az adatot a kóddal: ADO.NET  És a legnagyobb probléma: objektumok != relációs adatok

4 Ahogy EF előtt csináltuk - DataReader 4 using (SQLConnection conn = new SQLConnection(“ ”); { conn.Open(); SQLCommand cmd = conn.CreateCommand(); cmd.CommandText = “sp_StoredProc”; “Dallas”); using (SQLDataReader rdr = cmd.ExecuteReader()) { while (rdr.read()) { string name = rdr.GetString(0); string city = rdr.GetString(1); } } }  Bármire képesek vagyunk, csak épp egyre több idő alatt és törékeny kódot létrehozva Hard kódolt sztringek! Nincs fordítási idejű ellenőrzés, sem Intellisense A paraméterek lazán kötve: A nevük, típusuk, darabszámuk nincs ellenőrizve futásig Az eredmények sem típusosak

5 Egy fokkal közelebb - DataSet dsNorthwind dsNorth = new dsNorthwind(); ProductsTableAdapter taProducts = new ProductsTableAdapter(); taProducts.Fill(dsNorth.Products); foreach (dsNorthwind.ProductsRow row in dsNorth.Products) { Response.Write(row.ProductName + " " + row.UnitPrice + " "); }  A háttérben még mindig SQL szkripteket írunk és az eredmények továbbra sem az üzleti objektumainkba érkeznek

6 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

7  Az Entity Framework egy olyan adatelérési keretrendszer (angolul ORM (Object-Relational Mapper) API), amely segít áthidalni a különbségeket az alkalmazás adatstruktúrája és üzleti objektumai között.  Automatikusan létrehozza az adatokat reprezentáló entitásokat és a köztük lévő kapcsolatokat  Olyan flexibilis objektum modellt biztosít, amely lehetővé teszi az adatok objektumokhoz kötését többféle módon is  A LINQ kéréseket SQL lekérdezéssé transzformálja Mi az Entity Framework?

8 Történelem  1.0 (valójában 3.5)   POCO, lazy loading, Model First  továbbfejlesztett SQL, LINQ, designer, stb.  4.1 – NuGet  DBContext és Code First appoach  6.0 – 2013  Async Query and Save, Connection Resiliency  SQL logging, testability improvements, stb.  Jelenleg 6.1.2, 7.0 – 2015 nyarán  New platforms and data sources  Lightweight and extensible

9 Mit csinál pontosan? Rob Vettor  Az adatok konceptuális nézetén lehet végezni az adatok elérését, nem pedig magán az adatforráson  Automatikusan típusos entitás objektumok kerülnek létrehozásra, amelyek az adatok 1-1 összerendelése, de testre szabható  Automatikusan létrejönnek az objektumok között a kapcsolatok  Automatikusan lefordítja a LINQ lekérdezéseket SQL lekérdezésekké  Automatikusan nyilván tartja a változásokat, intézi az adatbázis update/insert/delete-eket  Vizuális modellező eszközt biztosít

10 Objects XML LINQ Providers C# 3.0 VB 9.0 Relational LINQ to Objects LINQ to SQL LINQ to XML LINQ to Entities LINQ to Datasets Query Operators LINQ oldalról nézve

11 Rob Vettor 11 V3.0 Legacy ADO.NET 2.0 does not go away! Entity Framework Programming Model ADO.NET oldalról nézve

12 Entity Client Object Services EDM Az EF architektúrája

13 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

14 Tábla megfeleltetése entitás objektumnak Constraintek (elsődleges kulcs, nullozhatóság stb.) Öröklődések, sok-sok kapcsolatok kezelése { } Az Entity Data Model

15 Ahogy tehát a mappelés működik SQL C# kód Adatbázis Tábla Oszlopok DbContext Entitás osztály Mezők, tulajdonságok [Database] [Table] [Column]

16 Entity Data Model demó  EDM design módok  Database first  Model First (4.0 óta)  Code First (4.1 óta) Data annotations / Fluent API  Designer túra…  Új Entity Data Model létrehozása a mapping wizard segítségével  Entitások, skalár és navigációs tulajdonságok az EDM Designer-ben  Model Browser  Mapping Details  EDMX file  Generált entity class-ok Rob Vettor 16

17 Entity Data Model ismétlés Relationship Olyan objektum, amely az entitások közti asszociációt határozza meg Scalar Property Az entitás egy tulajdonsága Navigation Property Mutató a kapcsolódó entitás(ok)ra. Many-to-Many Navigation property-k reprezenálják. Elrejti az asszociációs entitást. Entity Az alap objektum

18 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

19  A modell tárolója  Belépési pont az entitásokhoz  Adatforrás kapcsolat menedzselője  Felelős az SQL generálásért  A példányosított entitások lokális cache-eként szolgál  Teljes változás követést biztosít  Konkurencia- és tranzakció menedzsment Entity Designer DbContext Target Entity using (NorthwindEntities db = new NorthwindEntities()) Factory DP az entitások pélányosítására A DbContext

20 Konceptuális modell programozása Entity ClientObject Services nÚj SQL dialektus  eSQL  Belülről ADO.NET, connection-t és command-ot generál, data reader-t ad vissza  High performance – adatokat ad vissza, nem objektumokat  Megkérdőjelezhető felhasználás – talán ha csak adat kell, nem pedig entitás objektumok nKonceptuális model lekérdezése LINQ segítségével  Compile time típus ellenőrzés, debug támogatás és Intellisense nA lekérdezés eredmények erősen típusos entitás objektumokba példányosulnak nErőforrás igényes: 1. Kifejezésfa elkészítése 2. Konvertálás SQL lekérdezéssé 3. Lekérdezés futtatása 4. Adatok fogadása 5. Adatok konvertálása objektumokká

21 Query (Expression Pattern) szintaxis ismétlés from id in source { from id in source | join id in source on expr equals expr [ into id ] | let id = expr | where condition | orderby ordering, ordering, … } select expr | group expr by key [ into id query ] from-mal kezdődik További from, join, let, where, vagy orderby Végül select group by Opcionálisan into-val folytatható A Query Expression Pattern metódusai Where Select, SelectMany OrderBy, OrderByDescending, ThenBy, ThenByDescending GroupBy Join, GroupJoin Cast

22 Metódus szintaxis ismétlés var q = from m in list where m.Title.StartsWith( "S" ) select new { m.Title, m.Length }; var q = from m in list where m.Title.StartsWith( "S" ) select new { m.Title, m.Length }; var q = list.Where( m => m.Title.StartsWith( "S" ) ).Select( m => new { m.Title, m.Length } ); var q = list.Where( m => m.Title.StartsWith( "S" ) ).Select( m => new { m.Title, m.Length } ); Bővítő metódusok Lambda kifejezések Query Expression Objektum inicializáló Névtelen típus Implicit típusú lokális változó

23 LINQ-To-Entities demó  DEMÓ  Szakok lekérdezése  Eredmények renderelése DataGrid-be  Generált SQL megtekintése SQL Profiler-el  “Query szintaxis” vs. “Method szintaxis”

24 Generált SQL példa

25  Order-ből: navigation property használata a kapcsolódó OrderDetail entitások eléréséhez: from o in Orders where 20 < o.OrderDetails.UnitPrice select o;  OrderDetails-ből: navigation property használata a szülő Order entitás eléréséhez: from d in OrderDetails where d.Order.OrderID == 1 select d;  DEMÓ Orders OrderID OrderDetails OrderDetaillD OrderID Order maps reference to collection of OrderDetails objects (EntitySet Type) OrderDetails maps reference to single Order object (EntityRef Type) Navigation Property-k

26 Lekérdezések vs. tárolt eljárások  EF támogatja mindkét megoldást  Paraméteres lekérdezések  EF automatikusan generálja  SQL-ben tábla szintű jogosultságot igényelnek  Tárolt eljárások  Security  SQL kézben tartása  teljesítmény  Viszont valós veszély, hogy az üzleti logika átkerül SQL oldalra…

27  A LINQ alapból a “deferred execution”-t használja  Legtöbbször a lekérdezés definiáláskor nem fut le ténylegesen // define query var query = from c in ctx.Customers where c.Region == "OR" orderby c.CompanyNameselect c; // execute query dgvQuery.DataSource = query;  A lekérdezés csak akkor fut le, amikor az eredményre szükség van: Kontrollhoz kötéskor Foreach ciklusban az adatokon végigiteráláskor Kollekcióvá alakításkor, pl. ToList(), ToArray() Egy objektum lekérdezésekor (aggregáláskor, vagy pl. First(), Last()) Lazy Loading (késleltetett betöltés)

28 Objektum gráfok betöltése  Objektum gráf: egymáshoz kapcsolódó objektumok halmaza  Alapértelmezetten a gyerek objektumhalmazok egyesével töltődnek be (külön karika az adatbázis felé), amikor szükség van rájuk  Az Include() metódus segítségével előre definiálhatjuk az objektum gráfot, így egyetlen lekérdezéssel töltődik be az egész a memóriába  DEMÓ CustomerProductOrderCategoryOrder Detail

29 Változás követés  Az ObjectContext automatikusan követi a változásokat az ObjectStateManager objektuma segítségével  Lekérdezéskor becache-eli az eredeti értékeket  Mentéskor (SaveChanges()) automatikusan létrehozza az update/insert/delete SQL parancsokat  Változás követés kikapcsolása (csak olvasás esetén): context.Products.MergeOption = MergeOption.NoTracking;

30 Update / Insert / Delete  Update: entitás tulajdonságának változtatása, majd SaveChanges()  Insert: több lépéses folyamat  Új entitás objektum definiálása  Az entitás hozzáadása az ObjectContext-hez  SaveChanges() meghívása a context-en az adatbázisba mentéshez  Delete:  db.Products.DeleteObject(product);  db.SaveChanges();  DEMÓ  Változtatás, mentés  ObjectStateManager megtekintése  A generált SQL parancsok

31 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

32 Objektumorientált sajátosságok leképezése  Öröklődés példák  Table per Hierarchy Egyetlen tábla  Table per Type Öröklődésenként egy tábla  Splitting  Több tábla egy entitásba  Egy tábla több entitásba  Sok-sok kapcsolat  Két oszlopos kapcsolótábla  DEMÓ**

33 Table-Per-Hierarchy összerendelés nEntitások közti öröklődés – adatbázisban egy tábla nAz összerendelés a discriminator column alapján történik valamilyen feltétel mentén nA származtatott típusok lekérdezhetőek where feltétel nélkül az OfType() metódussal: from c in db.Products.OfType () nLimitáció: nehéz a diszkriminátor oszlopot módosítani EF-el – adatbázis megoldás segít (trigger / sp) Product DiscontinuedFlag Database Table Entities Discriminator Column DiscontinuedProduct Product Base Type Derived Type

34 Table-Per-Type összerendelés  A modellben lényegében az asszociációt cseréljük öröklődésre  Kiküszöböli a navigációs tulajdonságok használatának szükségességét a bejárásra  A származtatott típusok szintén hozzáférhetőek az OfType() metódus használatával  Limitáció: gyermeket nem lehet törölni anélkül, hogy a szülőt is törölnénk

35 Feldarabolás (Splitting) Entity SplittingTable Splitting

36 Agenda ÉÉlet az EF előtt EEntity Framework bemutatása AAz Entity Data Model PProgramozási koncepciók TTovábbi mappelési lehetőségek HHogyan tovább

37 EF könyvek

38  Bátyai Krisztián EF linkgyűjteménye   Reiter István: Code First bevezető   MVA: Implementing Entity Framework with MVC  További info

39 Köszönöm a figyelmet! Kérdések


Letölteni ppt "ENTITY FRAMEWORK Török János Zsolt"

Hasonló előadás


Google Hirdetések