280 likes | 449 Views
LINQ a SQL Server 2008. Miroslav Kubov čík V ývojársky špecialista Microsoft Slovakia Blog: http://blog.aspnet.sk/mirkub/. Agenda. Language INtegrated Query Benefity použitia LINQ LINQ to SQL ADO.NET Entity Framework. LINQ – Pre čo?. LINQ – základné fakty.
E N D
LINQ a SQL Server 2008 Miroslav Kubovčík Vývojársky špecialista Microsoft Slovakia Blog: http://blog.aspnet.sk/mirkub/
Agenda • Language INtegrated Query • Benefity použitia LINQ • LINQ to SQL • ADO.NET Entity Framework
Kód na prístup k dátam - dnes class DataAccess{ static void GetNewOrders(DateTime date, int qty) { using (SqlConnection con = new SqlConnection(Settings.Default.NWDB)) { con.Open(); SqlCommandcmd = con.CreateCommand(); cmd.CommandText = @" SELECT o.OrderDate, o.OrderID, SUM(d.Quantity) as Total FROM Orders AS o LEFT JOIN [Order Details] AS d ON o.OrderID = d.OrderID WHERE o.OrderDate >= @date GROUP BY o.OrderID HAVING Total >= 1000"; cmd.Parameters.AddWithValue("@date", date); DbDataReader r = cmd.ExecuteReader(); while (r.Read()) { Console.WriteLine("{0:d}:\t{1}:\t{2}", r["OrderDate"], r["OrderID"], r["Total"]); } } } } Syntax „query“je špecifická pre zdroj a musí byť zabudovaná do aplik.kódu Dátové hodnoty sú v dátových štruktúrach
Kód na prístup k dátam - LINQ class DataAccess { static void GetNewOrders(DateTime date, int qty) { using (NorthWindDBnw = new NorthWindDB ()) { varorders = from o in nw.Orders where o.OrderDate > date select new { o.orderID, o.OrderDate, Total = o.OrderLines.Sum(l => l.Quantity); foreach(SalesOrder o in orders) { Console.WriteLine("{0:d}\t{1}\t{2}", o.OrderDate, o.OrderId, o.Total); } } } } Syntax „query“ je natívny aplikačný kód Dátové objekty sú plnohodnotnými typmi objektov
<book> <title/> <author/> <year/> <price/> </book> Relačné dáta Objekty XML Portfólio LINQ C# 3.0 VB 9.0 Ďalšie… .NET Language Integrated Query LINQ toObjects LINQ toDataSets LINQ toSQL LINQ toEntities LINQ toXML
Agenda • Language INtegrated Query • Benefity použitia LINQ • LINQ to SQL • ADO.NET Entity Framework
Zjednodušenie kódu varzakaznici= from c in db.Zakaznici where c.Mesto== „Bratislava" select c;
Flexibilita <xml> … </xml>
Agenda • Language INtegrated Query • Benefity použitia LINQ • LINQ to SQL • ADO.NET Entity Framework
LINQ to SQL • LINQ to SQL obsahuje • Implementáciu LINQ „query“jazyka voči SQL Serveru • Mapovací systém - mapujedatabázu na objektový model • Visual Studio 2008 Object Relational Designer • Menu „Add / New Item / LINQ to SQL classes“ • Generuje DBML súbor • Môžete začať z databázy alebo z objektového modelu
LINQ to SQL • Objektové konštrukcie mapované na relačné konštrukcie
Aktualizácia dát • Postup aktualizácie: • „query“ na objekty • Aktualizácia na klientskej/aplikačnej vrstve • Volanie DataContext.SubmitChanges • Zmeny si automaticky sleduje model • Aktualizácie/Zmeny môžu kaskádovať • Metóda SubmitChangesmôže byť transakčná (použitímSystem.Transactions)
LINQ to SQL a ulož. procedúry • LINQ to SQL modelypodporujú ulož. procedúry • Ako kolekciu metód • Podpora uložených procedúr s viac resultset-mi • Podpora ulož.procedúr na aktualizácie • Poskytuje metódy prekrývajúce Insert[trieda], Update[trieda] a Delete[trieda] • Implementácie metód volajú ulož.procedúry priamo this.ExecuteCommand("exec my_insert_procedure"); (C#) Me.ExecuteCommand("exec my_insert_procedure") (VB)
Generovanie SQL príkazov • LINQ to SQL generuje parametrizované SQL • Zabudovaná ochrana proti SQL injection • Generovaný SQL príkaz sa dá odsledovať • Projekcie a „joiny“ generujú anonymné typy • Alebo definujú triedu pre každú projekciu/join • Visual Studio 2008 ORM dizajnér podporuje SQL Sever 2008 • Vyžaduje VS2008 SP1
Agenda • Language INtegrated Query • Benefity použitia LINQ • LINQ to SQL • ADO.NET Entity Framework
ADO.NET Entity Framework • Poskytuje vrstvu abstrakcie voči databázam nazvanú Entity Data Model (EDM) • Vývoj voči konceptuálnym entitám reprezentujúcim dáta • Entity sú mapované na databázovúschému • Mapovanie je explicitné a dá sa meniť • Výhody: • Abstrakcia úložiska dát • Minimalizácia vplyvu zmien medzi aplikáciou a dátovým úložiskom Entity Framework je sadatechnológií, ktoré zjednodušujú vývoj dátovo flexibilných aplikácií.
Entity Framework LINQ to Entities Object Services • Entity Data Model (EDM) • Konceptuálny a logický model • Entity Client • Triedy typu ADO.NET Provider • Entity SQL • Rozšírenie SQL jazyka pre entity • Object Services • Objektový model entít • LINQ to Entities • LINQ syntax pre Object Services a Entity SQL Entity SQL Entity Client Entity Data Model Konceptuálny Mapovanie Logický
EDM a vrstva mapovania • Mapovanie prepája konceptuálny model a schému úložiska • Model mapovania je implementovaný schémami • Konceptuálna schéma (CSDL) • Schéma úložiska (SSDL) • Mapovacia schéma (MSL) • Schémy mapovania je možné generovať nástrojmi • EDMGen.exe – volanie z príkazového riadka • Entity Designer – grafický nástroj v VS 2008 SP1 • Generovanie použitímtriedyEntityClassGenerator • System.Data.Entity.Design • System.Data.Metadata.Edm
EDM mapovanie a databázy • Model mapovania • Tabuľky a pohľady na EntitySet • „Foreign Key“ reštrikcie na AssociationSet • Uložené procedúry naImportFunction • Užívateľsky definované funkcie typu „Table-Value“ na ImportFunction • Klientské pohľady („Client Views“) • Definované ako časť modelu mapovania • Podobné databázovým pohľadom
„Query“ pre Entity Data Model • LINQ to Entities • Typy a kontrola syntaxe pri kompilácii • Podpora IntelliSense • Entity SQL • Pridáva EDM sémantiku do SQL jazyka • Užitočný pre tvorbu dynamických požiadaviek • Umožňuje volať uložené funkcie • LINQ aj Entity SQL sú prekladané do SQL dialektu databázového servera • Optimalizácia pre daný databázový server
Použitie LINQ to Entities Northwindnw = new Northwind(); // vybranie celej entity var query = from c in nw.Customers select c; foreach (varcs in query) Console.WriteLine("{0} {1}", cs.Customerid, cs.CustomerName); // jednoduchá projekcia var query2 = from c in nw.Customers select new { CID=c.CustomerID, CName=c.CompanyName }; foreach (varcs in query2) Console.WriteLine("{0} {1}", cs.CID, cs.CName);
Kedy LINQ to SQL a kedy ADO.NET EF? • LINQ to SQL • Rýchly vývoj silne typovej dátovej vrstvy • 1:1 mapovanie objektov na databázu • Databáza SQL 2000/2005/2008 • ADO.NET Entity Framework • Robustné dlhodobo udržovateľné riešenia • Flexibilné a komplexné mapovacie scenáre • 1:n, komplexné typy, vzťahy • Kompozícia a dedičnosť entít • Nepriama väzba na databázu cez model • Podpora väčšiny bežne používaných databáz
Zdroje • Definovanie Entity Data Modelu • http://www.code-magazine.com/Article.aspx?quickid=0712022 • Mapovanie Entity Data Modelu na relačnú databázu • http://www.code-magazine.com/article.aspx?quickid=0712032 • Programovanie voči ADO.NET Entity Framework • http://www.code-magazine.com/Article.aspx?quickid=0712042 • Blog ADO.NET tímu • http://blogs.msdn.com/adonet • The LINQ Project Website • http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx