entity framework

of 39/39
ENTITY FRAMEWORK Török János Zsolt [email protected]

Post on 02-Jan-2016

82 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Entity Framework. Török János Zsolt torokjzsolt @ gmail.com. Agenda. Élet az EF előtt Entity Framework bemutatása Az Entity Data Model Programozási koncepciók További mappelési lehetőségek Hogyan tovább. Az alapprobléma. Alkalmazásokat írunk - PowerPoint PPT Presentation

TRANSCRIPT

Entity Framework

Entity FrameworkTrk Jnos [email protected] az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

Az alapproblmaAlkalmazsokat runkEzek mind relcis adatbzisban troljk az adatokatLegalbb kt klnbz nyelv (C# and SQL)Klnbz szintaxisKlnbz tpusokKlnbz eszkzkKlnbz paradigmk: objektum orientlt vs. procedurlisValamint meg kell tanulni az API-t ami sszekti az adatot a kddal: ADO.NETs a legnagyobb problma: objektumok != relcis adatokAhogy EF eltt csinltuk - DataReader4using (SQLConnection conn = new SQLConnection(); {conn.Open();SQLCommand cmd = conn.CreateCommand();cmd.CommandText = sp_StoredProc;cmd.parameters.AddWithValue(@City, Dallas);using (SQLDataReader rdr = cmd.ExecuteReader()){while (rdr.read()){ string name = rdr.GetString(0); string city = rdr.GetString(1);}}}Brmire kpesek vagyunk, csak pp egyre tbb id alatt s trkeny kdot ltrehozva

Hard kdolt sztringek! Nincs fordtsi idej ellenrzs, sem IntellisenseA paramterek lazn ktve:A nevk, tpusuk, darabszmuknincs ellenrizve futsigAz eredmnyek sem tpusosak4Egy fokkal kzelebb - DataSetdsNorthwind 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 httrben mg mindig SQL szkripteket runk s az eredmnyek tovbbra sem az zleti objektumainkba rkeznekAgendalet az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

Az Entity Framework egy olyan adatelrsi keretrendszer (angolul ORM (Object-Relational Mapper) API), amely segt thidalni a klnbsgeket az alkalmazs adatstruktrja s zleti objektumai kztt. Automatikusan ltrehozza az adatokat reprezentl entitsokat s a kztk lv kapcsolatokatOlyan flexibilis objektum modellt biztost, amely lehetv teszi az adatok objektumokhoz ktst tbbfle mdon isA LINQ krseket SQL lekrdezss transzformlja

Mi az Entity Framework?7Trtnelem, versenytrsak1.0 2008 augusztusban, vote for no confidence4.0 2010 prilisbanPOCO, lazy loading, N-Tier supporttovbbfejlesztett SQL, LINQ, designer, stb.Tovbbi ORM eszkzk:LINQ to SQL (VS 2008)Hibernate (Java)NHibernate (.NET)Enterprise Objects Framework (Mac OS) s mg sokan msok

Mit csinl pontosan?Rob VettorAz adatok konceptulis nzetn lehet vgezni az adatok elrst, nem pedig magn az adatforrsonAutomatikusan tpusos entits objektumok kerlnek ltrehozsra, amelyek az adatok 1-1 sszerendelse, de testre szabhatAutomatikusan ltrejnnek az objektumok kztt a kapcsolatokAutomatikusan lefordtja a LINQ lekrdezseket SQL lekrdezsekkAutomatikusan pldnyostja az entits objektumokat az adatbzis lekrdezsekblAutomatikusan nyilvn tartja a vltozsokat, intzi az adatbzis update/insert/delete-eketVizulis modellez eszkzt biztost

Objects

XMLLINQ ProvidersC# 3.0VB 9.0RelationalLINQ toObjectsLINQ toSQLLINQ toXMLLINQ toEntitiesLINQ toDatasetsQuery OperatorsLINQ oldalrl nzveRob Vettor11StoreADO.NET Data Provider(SqlClient, OracleClient)CommandConnectionReaderAdapterV3.0Conceptual Data ModelLegacy ADO.NET 2.0 does not go away!ADO.NET Entity Provider (entity client)LINQ to Entities, Entity SQLEntity Framework Programming ModelMappingADO.NET oldalrl nzveToday, with ADO.NET 2.0, We have providers that provide connections, commands, etc that are specific to a particular data store

In Version 3.0, developer can build conceptual model of the storeProgram against model that ties closely to domainMapping technology translates conceptual model to real store

You are abstracted from underlying store and program against conceptual model instead of logical model

LINQ to Entities is object-relational mapping API mapping between conceptual model and .NET types in memory, which give you the ability to use language integrated queries to manipulate the conceptual model

So. in nutshell, on top you have LINQ, with Object Relational Mapping API on top of a conceptual model, which itself is mapped to is mapped to the underlying store.11

EntityClientObject ServicesEDMAz EF architektrja

Agendalet az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

Tbla megfeleltetse objektumnakConstraintek (elsdleges kulcs, nullozhatsg stb.)rkldsek, sok-sok kapcsolatok kezelse

Adatbzis CSDLKoncepcionlis modell{ }MSLMegfeleltetsi lers (map)SSDLAdatbzis fizikai modellObjektumObjektumObjektum

Az Entity Data Model14Ahogy teht a mappels mkdikA teljes relcis adatbzist egy ObjectContext reprezentljaTblkbl Entits osztlyok keletkeznekOszlopokbl pedig mezk s tulajdonsgokSQLC# kdAdatbzisTblaOszlopokObjectContextEntits osztlyMezk, tulajdonsgok[Database][Table][Column]Entity Data Model demEDM design mdokDatabase firstModel First (4.0 ta)Code First (4.1 ta)Designer traj Entity Data Model ltrehozsa a mapping wizard segtsgvelEntitsok, skalr s navigcis tulajdonsgok az EDM Designer-ben Model BrowserMapping DetailsEDMX fileGenerlt entity class-okRob Vettor16

Entity Data Model ismtlsRelationshipOlyan objektum, amely az entitsok kzti asszocicithatrozza meg

Scalar PropertyAz entits egy tulajdonsga

Navigation PropertyMutat a kapcsoldentits(ok)ra.

Many-to-ManyNavigation property-k reprezenljk. Elrejti az asszocicis entitst.EntityAz alap objektumAgendalet az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

Az EF troljaBelpsi pont az entitsokhozAdatforrs kapcsolat menedzseljeFelels az SQL generlsrtA pldnyostott entitsok loklis cache-eknt szolglTeljes vltozs kvetst biztost Konkurencia- s tranzakci menedzsmentEntity DesignerObject ContextTarget Entity using (NorthwindEntities db = new NorthwindEntities())Factory DP az entitsokplnyostsraAz Object ContextKonceptulis modell programozsaEntity ClientObject Servicesj SQL dialektus eSQLBellrl ADO.NET, connection-t s command-ot generl, data reader-t ad visszaHigh performance adatokat ad vissza, nem objektumokatMegkrdjelezhet felhasznls taln ha csak adat kell, nem pedig entits objektumok

Konceptulis model lekrdezse LINQ segtsgvelCompile time tpus ellenrzs, debug tmogats s IntellisenseA lekrdezs eredmnyek ersen tpusos entits objektumokba pldnyosulnakErforrs ignyes: 1. Kifejezsfa elksztse 2. Konvertls SQL lekrdezss 3. Lekrdezs futtatsa 4. Adatok fogadsa 5. Adatok konvertlsa objektumokk

Query (Expression Pattern) szintaxis ismtls 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 kezddikTovbbi from, join, let, where, vagy orderbyVgl select group byOpcionlisan into-val folytathatA Query Expression Pattern metdusaiWhereSelect, SelectManyOrderBy, OrderByDescending, ThenBy, ThenByDescendingGroupByJoin, GroupJoinCastMetdus szintaxis ismtlsvar q = from m in list where m.Title.StartsWith( "S" ) select new { m.Title, m.Length };var q = list.Where( m => m.Length.StartsWith( "S" ) ) .Select( m => new { m.Title, m.Length } );Bvt metdusokLambda kifejezsekQuery ExpressionObjektum inicializlNvtelen tpusImplicit tpus loklis vltozLINQ-To-Entities demDEMMinden Mnchen-be szlltott megrendels lekrdezseEredmnyek renderelse DataGridView-baGenerlt SQL megtekintse SQL Profiler-elQuery szintaxis vs. Method szintaxisGenerlt SQL plda

Order-bl: navigation property hasznlata a kapcsold OrderDetail entitsok elrshez:from o in Orderswhere 20 < o.OrderDetails.UnitPriceselect o;OrderDetails-bl: navigation property hasznlata a szl Order entits elrshez:from d in OrderDetailswhere d.Order.OrderID == 1select d;

DEMOrdersOrderID

OrderDetailsOrderDetaillDOrderID

Order maps reference to collection of OrderDetails objects (EntitySet Type)OrderDetails maps reference to single Order object (EntityRef Type)Navigation Property-kLekrdezsek vs. trolt eljrsokEF tmogatja mindkt megoldstParamteres lekrdezsekEF automatikusan generljaAz execution plan-ek ugyangy cache-eldnek s jrahasznlhatakSQL-ben tbla szint jogosultsgot ignyelnekTrolt eljrsokSecurityGenerlt SQL kzben tartsa teljestmnyViszont vals veszly, hogy az zleti logika tkerl SQL oldalraA LINQ alapbl a deferred execution-t hasznljaA legtbbszr a lekrdezs definilsakor az nem fut le tnylegesen// define queryvar query = from c in ctx.Customerswhere c.Region == "OR"orderby c.CompanyNameselect c;// execute querydgvQuery.DataSource = query;

A lekrdezs csak akkor kerl futtatsra, amikor az eredmnyre szksg van:Kontrollhoz ktskorForeach ciklusban az adatokon vgigiterlshozKollekciv alaktskor, pl. ToList(), ToArray()Egy objektum lekrdezsekor (aggreglskor, vagy pl. First(), Last())

Lazy Loading (ksleltetett betlts)27Objektum grfok betltseObjektum grf: egymshoz kapcsold objektumok halmaza

Alaprtelmezetten a gyerek objektumhalmazok egyesvel tltdnek be (kln karika az adatbzis fel), amikor szksg van rjukAz Include() metdus segtsgvel elre definilhatjuk az objektum grfot, gy egyetlen lekrdezssel tltdik be az egsz a memribaDEMObjektum grf betltse (Order-hez: OrderDetail-ek s Customer)CustomerProductOrderCategoryOrder DetailVltozs kvetsAz ObjectContext automatikusan kveti a vltozsokat az ObjectStateManager objektuma segtsgvelLekrdezskor becache-eli az eredeti rtkeketMentskor (SaveChanges()) automatikusan ltrehozza az update/insert/delete SQL parancsokatVltozs kvets kikapcsolsa (csak olvass esetn):context.Products.MergeOption = MergeOption.NoTracking;

Update / Insert / DeleteUpdate: entits tulajdonsgnak vltoztatsa Insert: tbb lpses folyamatj entits objektum definilsaAz entits hozzadsa az ObjectContext-hezSaveChanges() meghvsa az adatbzisba mentshezDelete:db.Products.DeleteObject(product); db.SaveChanges(); DEMVltoztats, mentsObjectStateManager megtekintseA generlt SQL parancsok

Agendalet az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

Objektumorientlt sajtossgok lekpezserklds pldkTable per HierarchyEgyetlen tblaTable per Typerkldsenknt egy tbla

SplittingTbb tbla egy entitsbaEgy tbla tbb entitsba

Sok-sok kapcsolatKt oszlopos kapcsoltblaDEMProductBaseTestProductProductDiscontinuedProductEmployeeTerritory**32Table-Per-Hierarchy sszerendelsEntitsok kzti sima rklds - egy adatbzis tblaAz sszerendels a discriminator column alapjn trtnik valamilyen felttel mentnA szrmaztatott tpusok lekrdezhetek where felttel nlkl az OfType() metdussal: from c in db.Products.OfType()Limitci: nehz a diszkrimintor oszlopot mdostani EF-el adatbzis megolds segt (trigger / sp)

Product

DiscontinuedFlagDatabase TableEntitiesDiscriminatorColumnDiscontinuedProductProductBase TypeDerived TypeTable-Per-Type sszerendelsA modellben lnyegben az asszocicit cserljk rkldsreKikszbli a navigcis tulajdonsgok hasznlatnak szksgessgt a bejrsraA szrmaztatott tpusok szintn hozzfrhetek az OfType() metdus hasznlatvalLimitci: gyermeket nem lehet trlni anlkl, hogy a szlt is trlnnk

Feldarabols (Splitting)Entity SplittingTable Splitting

Agendalet az EF elttEntity Framework bemutatsaAz Entity Data ModelProgramozsi koncepcikTovbbi mappelsi lehetsgekHogyan tovbb

EF knyvek

37Btyai Krisztin EF linkgyjtemnye:http://goo.gl/Pk1MTZeeshan Hirani: EF segdlethttp://goo.gl/VaIVJMS Data Development videk:http://goo.gl/VeMwn

Tovbbi infoKsznm a figyelmet!Krdsek