Přístup k datům .NET Linq je závyslí na platformě SQL a užívá výhradně mapování 1:1 Ntyty Framework je plnohodnotný objektový relační maper, umožňuje měnit
mapování na fyzický model bez změny konceptuálního modelu Ado.net – součást NET zprostředkovávající přístup k datům pomocí XML Práce s daty LINQ – podpora dotazování přímo do NET pomocí vybraného
programovacího jazyka Podpora objektově orientovaného programování (Entyty Framework) – implicitně
nezávislý objektový přístup k databázím
Ado.NET Je součástí frameworku sprostředkovávající přístup k datům pomocí XML Umožňuje připojení k libovolnému databázovému systému
Architektura Důležité je rozdělení mezi databází a XML
Základní třídy Neobsahuje obecné objekty určení k manipulaci se všemi druhy databází, ale
poskytovatele dat navrhnuté konkrétně pro různé druhy zdrojů dat SQL server, OLBD, Oracle, ODBC
Connection – zprostředkovává spoje se zdrojem dat Command – vykonává SQL příkazy a uložené proceůry DataReader – poskytuje rychlý přístup k datům získaným z dotazu DataAdapter – plní sadu dat (DataSet) a promítá změny do zdroje dat
Třídy pro správu dat Třídy představují objekty, jedná se o strukturovaný přístup k datům Dataset – reprezentace sady dat zahrnující v sobě tabulky, vztahy mezi daty a
oznámení i v offline režimu DataTable – data jsou umístěna v řádcích a každá položka přísluší určitému sloupci DataColumn – objekt definuje sloupce a jeho datový typ DataRow – obsahuje data jednoho řádku datové tabulky DataRealtion – umožňuje vytvořit vztah, mezi dvěma nebo více objekty typu
DataTable pomocí jejich dvou sloupců DataColumnMaping a DataTableMaping – umožňují mapovat sloupcům tabulky nová
jména pro jednodušší použití v databázových aplikacích
Třídy pro připojení k databázím Lze vytvářet vlastní pomocí rozhraní systémdataigb
Třídy pro SQL
SqlConnectiom Připojení k databázi Parametry připojení:
o Server – název databázového serveruo Uid – jméno uživateleo Pwd – heslo uživateleo Database – název databáze
SqlCommand Spuštění dotazu na datovém zdroji Typ dotazu
o Text – používá se pro textové zadání SQL dotazuo TableDirect – používá se ro data tabulkyo StroredProcedure – používá se pro volání uložených procedur
SqlDataAdapter Spojuje data v paměti (DataSet) s daty v databázovém systému
SqlCommandBuilder Vytváří kolekci SQL dotazů pro aktualizaci, přidání a mazání dat
SqlTransaction Umožňuje spusti t více příkazů na jednou, které mají být provedeny jako jediná
nedělitelná transakce
Sdílení dat Přenášení dat mezi vstvami je jednoduší, než přenášení odpojeného adorecord setu Pro přenesení adorecord setu z jedné komponenty na druhou se musí použít
commerselink Pro přenesení ado.net datasetu jednoduše přenést XML soubor
Typy objektů data adaptérů Objekt SqlDataAdapter – je prostředníkem v komunikaci mezi tabulkou datasetu a
tabulkou nebo pohledem SQL server databázi Objekt OleDbDataAdapter – je prostředníkem v komunikaci mezi tabulkou datasetu a
tabulkou pohledem v libovolném datovém zdroji, který je přístupný před OLE DB poskytovatele
Objekt ODBCDataAdapter – objekt je prostředníkem v komunikaci pomocí ODBC Objekt OracleDataAdapter – je prostředníkem komunikace tabulkou datasetu
tabulkou nebo pohledem v Oracle databázi
Odpojený přístup k databázím Umožňuje odpojený přístup k datům z databáze, ale běžně se užívá v připojeném
režimu Ado komunikuje s databází prostřednictvím volání služeb OLEDB poskytovatele Ado.net komunikuje prostřednictvím objektu dataedjector, který interně volá OLEDB
poskytovatele, někdy používá přímé rozhraní IP adres poskytované systémem řízení databáze
Linq Podpora dotazování přímo do dot.net programovacího jazyku Nová palety klíčových slov pro provádění dotazů nad daty Odhalení chyb již v době kompilace
Implementace Podporo od verze 3.5 net Framework LINQ to Objects – implementace LINQ pro standartní kolekce nacházející se
v paměti LINQ to SQL – implementace LINQ pro SQL server 2000 a vyšší LINQ to XML – implementace LINQ pro práci s XML daty LINQ to DataSet – implementace LINQ pro práci s Ado.NET datasety
Výhody Umožňuje psát dotazy včetně aktualizačních na různé datové zdroje jednotným
způsobem Snadno lze převádět data do/z objektů Jednotná syntaxe pro práci s různými druhy dat Silně typový kód Lze jednoduše kombinovat data z různých zdrojů Zjednodušení práce Vysoký výkon Bezpečný přístup k datům z SQL serverů Je deklarativní
Syntaxe V C se začíná klauzulí from Data vybíráme z dataContext.JmenoTabulky
V klauzuli where se provádí kontrola na jméno sloupečku, pokud dojde k chybě, není možné program přeložit
Zápis dotazů pomocí lambda funkcí Lambda funkce je anonymní funkce Umožňuje ušetřit řádky kódu deklarace a není třeba pro ni vymýšlet název Po jménu tabulky postupně voláme metody (proto metoda(paramtry)) jako Where() a
Select() Parametry metod jsou zadávány pomocí lambda funkce
o Před špičkou (zapsanou pomocí rovnítka a větší než) je argument nebo seznam argumentů v závorkách, za špičkou je výraz který je speciální pro každou metodu (pro where je to výběrová podmínka; pro Select je to co má vrátit (seznam sloupečků))
Každý zápis pomocí normálního způsobu lze převést na lambda zápis, ale opačně to není vždy úplně možné
Lambda operátory:
Entity Framework Přináší možnost pracovat s vlastními třídami Vytváří objektový model nad strukturovanou databází Vychází z ado.net Je nezávislý na SQL databázovém serveru Je vhodný pro složitější vícevrstvé aplikace
Architektura Při užívání Entit pracujeme s komfortní virtuální databází Místo tabule jsou kolekce objektů (entityset) místo řádků objekty (entity), místo
sloupců vlastnosti objektů, místo relace asociativní vztahy mezi objekty, a obsauje dědičnost
Přínosy Podpora Linq konstrukcí Modifikace dat Pozdní vyhodnocení dotazu – minimalizuje množství dat získávaných z databáze Object identity – každá entita se v rámci kontextu natáhne jen jednou (mohou být dva
objekty pro tutéž entitu) Předkompilace dotazů pro rychlejší provádění Detekce konfliktů – při ukládání se kontroluje, zda nedošlo ke změnám ve sloupci Transakce – uzavření kódu do bloku using Kontrola načítání entit – při navigaci mezi entitami se entity natahují pouze na
vyžádání, pro potřebu přednatažení použít Include() v dotazu
Implementace Jsou k dispozici všechny řídící prvky, kam se zadávají dotazy na objekty Při zadávání dotazu do databáze se vytvoří virtuální vyhodnocovací plán dotazů proti
konceptuálnímu modelu, ten se přeloží do plánu, který se má vykonat proti schématu uložiště
Poskytovatel databáze pak převede plán do konkrétního SQL jazyka konkrétní databáze
Konceptuální schéma (CSDL) – určuje objektový model, kód ví jen o tomto modelu o dalších dvou nikoliv, definuje objekty, jejich vlastnosti, dědičnost atd.
Schéma uložiště (SSDL) – popisuje uložiště dat (databázi), obsahuje popisy tabulek, jejich sloupců, datových typů, uložených procedur, typů parametrů, relací v databázi atd.
Mapovací soubor (MSL) – mapuje objekty v CSDL na objekty v SSDL
Objektový model Příkazy entit se píší ručně Výsledky se dostaví netypové, nutné přetypovat na své typy Hodí se pro předem neznámí typ fragmentů Tradiční přístup z relačního světa lez uplatnit proti objektové databázi entit, ale s výše
uvedenými překážkami eSQL dotazy proti kontextu entit s pomocí CreateQuery<T> - tímto způsobem se
vrací typový výsledek, se kterým je možné dále pracovat LINQ dotazy proti kontextu – zpřístupňuje jednotlivé entity sety jako typové kolekce
– nejlepší způsob práce s plnou kontrolou syntaxe
Možnosti modelování Ne vše, co lez nastavit v modelovacích souborech je podporováno ve vizuálním
desingeru Komplexní (strukturované vlastnosti) – lze nadefinovat např.: typ Adresa (ulice,
město, PSČ), a pak lze užívat kontrakce typu: Jana.AdresaPrace.Ulice Entitu lze mapovat na více tabulek – v dabinzích bývá běžné volání pole vyjímkou do
extra tabulky, při tom je možné mít entitu a kód neví o rozdělení Více entity setů pro jenu entitu – lze např.: mít definovanou entitu Firma, která se
nachází ve dvou tabulkách – dodavatele a odebiratele Aktualizace dat pomocí uložených procedur – místo autogenerovancýh CRUD lze
užít uložené procedury Volání uložené procedury pomocí typů wrapperů – mohou vracet buď skalární údaje,
nebo entity
Schema uložení dat Data leze ukládat dle některé z předefinovaných možností
Table per hierarchy (TPH) Všechny třídy mající společného předka jsou v jedné tabulce se sloupečky pro
všechny vlastnosti všech typů Jeden sloupeček určuje konkrétní typ Je to jednoduché a rychlé Vede k řídkým tabulkám => problém s kontrolou validace na tabulkové vrstvě
Table per type (TPT) Každý typ má svojí tabulku, která se liší sloupci navíc od typu, ze kterého se dědí Jednoduché a rychlé Neefektivní pro dotazy, vracejí více konkrétních typů
XML Je otevřený a jazykově nezávislý Stěžejní pro přenos dat v ado.net
Uložení databáze do souboru XML Umožňuje uložit data i schéma datasetu Lze omezit používání značek na předem definované Užívá tagy a je založen na tvorbě vlastních tagů
Parser XML XPath XPath je jazyk užívaný pro identifikaci uzlů v XML dokumentu Hlavním rysem XPath je vyjádření relativní cesty od jednoho uzlu k druhému nebo či
atributu XPath připomíná dotazovací jazyk SQL
Základní funkce XPath
Základní třídy XPath pro hledání výrazů
Přehled výrazů XPath
XSLT procesor Jazyk XSLT slouží k transformaci XML na jinou formu (pdf, html…) K transformaci XML dokumentu se musí utvořit XSLT styl, který říká, jak se mají
jednotlivé značky dokumentu transformovat na výstupní značky XSLT obsahuje kromě deklarace kořenový element Základní transformace XSL tvoří šablony Uvnitř šablon leze vyhodnocovat podmínku if Uvnitř šablon lez integrovat příkaz for-each