Databáze a XML v.net/c# ADO.NET Entity Framework LINQ to XML

Podobné dokumenty
Programování v jazyku C# II. 5.kapitola

Úvod do Entity Frameworku

C# - Databáze úvod, ADO.NET. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Jazyk C# - přístup k datům

TÉMATICKÝ OKRUH TZD, DIS a TIS

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

Java a XML. 10/26/09 1/7 Java a XML

(Enterprise) JavaBeans. Lekce 7

Použití databází na Webu

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Dolování v objektových datech. Ivana Rudolfová

TÉMATICKÝ OKRUH Softwarové inženýrství

Databáze I. Přednáška 7

Generické programování

PŘETĚŽOVÁNÍ OPERÁTORŮ

Databáze 2013/2014. Konceptuální model DB. RNDr. David Hoksza, Ph.D.

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Základy objektové orientace I. Únor 2010

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Nové jazykové brány do Caché. Daniel Kutáč

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databáze II. 1. přednáška. Helena Palovská

Databázové systémy úvod

KAPITOLA 1 Představení platformy Microsoft SQL Server 2008

Vladimír

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

UJO Framework. revoluční architektura beans. verze

ADT/ADS = abstraktní datové typy / struktury

Jazyk PL/SQL Úvod, blok

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Architektury informačních systémů

Tvorba informačních systémů

ADO.NET Objekt Command (online scenář)

Tvorba informačních systémů

typová konverze typová inference

Programování a implementace Microsoft SQL Server 2014 databází

8 Třídy, objekty, metody, předávání argumentů metod

Geografické informační systémy p. 1

Teoretické minimum z PJV

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

NSWI096 - INTERNET JavaScript

Metody tvorby ontologií a sémantický web. Martin Malčík, Rostislav Miarka

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

RESTful API TAMZ 1. Cvičení 11

Využití XML v DB aplikacích

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Lubomír Dobrovolský, DOB113

Architektury informačních systémů

Business Intelligence

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

6 LINQ Strana LINQ Václav Pachta

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Dědičnost (inheritance)

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

Jazyk C# (seminář 5)

.NET v SQL Serveru. Jan Drozen NDBI039.

Návrh a tvorba WWW stránek 1/14. PHP a databáze

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Databáze v Java aplikacích, JPA Handout

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Úvod do programovacích jazyků (Java)

Jazyk C# - přístup k datům

MBI - technologická realizace modelu

Programování v C++ 2, 4. cvičení

Jazyk C# (seminář 6)

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Úvod. Boj se zavlečeným impedančním nesouladem na úrovni databáze

Tvorba informačních systémů

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Stopařův průvodce po ADO.NET a LINQ aneb Foxařův průvodce po práci s daty v.net Milan Kosina

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal

DUM 12 téma: Příkazy pro tvorbu databáze

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Databázové a informační systémy

Databáze I. Přednáška 4

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

IRAE 07/08 Přednáška č. 1

1 Webový server, instalace PHP a MySQL 13

Databáze I. 5. přednáška. Helena Palovská

PB161 Základy OOP. Tomáš Brukner

Transkript:

Databáze a XML v.net/c# ADO.NET Entity Framework LINQ to XML

Soubory Třídy ze jmenného prostoru System.IO File Directory Specifické formáty jako databáze nebo z knihoven Proudy StreamReader, StreamWriter

Historie ADO.NET Entity Framework

ADO.NET následník ADO (ActiveX Data Objects) hiearchie rozhraní a abstraktních tříd DataReader DataSet Typovaný DataSet LINQ to SQL ADO.NET Entity Framework

ADO.NET hierarchie tříd rozhraní IDbXXX a abstrakní třídy DbXXX IDbConnection, IDbCommand, IDbDataReader DBConnection, DbCommand, DbDataReader na těchto třídách jsou založeny konkrétní tříd - Data Providers např. pro MS SQL server existují třídy SqlConnection, SqlCommand, SqlDataReader, pro Oracle existují OracleConnection,

Databázové spojení třída DbConnection a její potomci reprezentuje připojení k databázi spojení je určeno podle connection stringu předaného konstruktoru nebo pomocí vlastnosti ConnectionString lze nastavovat v konfiguraci závisí na konkrétním datovém zdroji příklad: "server=localhost;user=root;database=test" seznam na http://connectionstrings.com/ programově se zpřístupní pomocí třídy ConfigurationManager používá Open a Close metody pro zavření a otevření

Databázový příkaz třída DbCommand a potomci představuje příkaz předaný databázi databázi (obvykle SQL) vlastnosti Connection, CommandText, CommandType provedení příkazu: ExecuteNonQuery ExecuteScalar ExecuteReader kolekce parametrů Parameters předání parametrů do SQL dotazu brání SQL injection každý provider má vlastní třídu parametrů vlastnosti: ParameterName, Value, DbType, Direction

Data Readers třída IDataReader sekvenční přístup k datům (readonly, move forward) vyvolán z DbCommand pomocí ExecuteReader data jsou čtena po řádcích přístup ke sloupcům pomocí indexerů this[int] podle pořadí sloupce this[string] podle názvů sloupce pro běžné datové typy jsou k dispozici vlatnosti Get<Typ>

Transakce třída DbTransaction metody Commit a Rollback vytváří se z Connection metodou BeginTransaction metody Rollback a Commit k příkazu (DbCommand) se přidá nastavením vlastnosti Transaction před voláním Execute metody vlastnost IsolationLevel

Transakce pohodlněji je lze řídit pomocí třídy TransactionScope třídy podporující transakce jsou schopny rozeznat, zda transakce běží a připojit se k nim automaticky transakce je možné skládat dohromady a vnořovat do sebe TransactionScope implementuje IDisposable používá se společně blokem using potvrzení transakce se provede pomocí metody Complete volání Dispose značí konec transakce nezavolání Complete před skončením platnosti proměnné TransactionScope vyvolá zrušení transakce

Transakce enum TransactionScopeOption předávaný konstruktoru určuje rozsah transakce Required vyžaduje transakci, jestliže již okolo existuje použije ji nebo vytvoří novou RequiresNew vyžaduje transakci, vždy vytváří novou Supress nikdy se neúčastní transakce, i když už transakce okolo existuje

Dataset in-memory reprezentace databáze tabulky, řádky, sloupce, vazby pro odpojená řešení knaplnění se používá třída DataAdapter pomocí zadaných SQL příkazů převádí obsah mezi databází a datasetem typovaný dataset generován dataset designerem silně typovaný, sloupce jako vlasnosti řádků

ORM Object-relational mapping co je to? abstrakce mezi objektovým světem a relačním je velký rozdíl tabulky dvourozměrné objekty dědičnost, zapouzdření, polymorfismus práce s relačními daty jako by to byly objekty v paměti skrývá komplexnost práce s daty jednotný způsob práce proč? produktivita nezávislost na databázi (téměř)

ORM - dědičnost table per hierarchy různé třídy v téže tabulce problém s prázdnými sloupci table per type každá třída má vlastní tabulku mohu společné sloupce přesunout do tabulky, která reprezentuje předka (s cizím klíčem potomek předek) problém, když mám ID předka JOINY

Způsob práce Entity Framework 1.NET Framework 3.5 SP1 jen Database First přístup Entity Framework 4.NET Framework 4 přidává Model First přístup Entity Framework 4.1 přidává Code First přístup

ADO.NET Entity Framework ORM nástroj od Microsoftu

Entity Data Model aplikační model nezávislý na databázi skládá se ze 3 vrstev konceptuální datový model CSDL Conceptual Schema Definition Language mapovací model MSDL Mapping Schema Definition Language model úložiště SSDL - Store Schema Definition Language

Aplikace Konceptuální model (Entity = Objekty) Mapování Model úložiště Entity Data Model Databáze

Entity Data Model při změně databáze se změní jen model úložiště a mapování konceptuální vrstva zůstáne nezměněna ideálně: aplikační logika si změny vůbec nevšimne

Entity Type základ EDM obdoba tříd v objektovém programování entity jsou instancemi entity typů Person, Order, OrderItem jedinečný název a klíč vlastnosti jméno + typ + omezení (Nullable, MaxLength, Precision) skalární vs. komplexní navigační vlastnosti jméno + asociace + konec asociace

Primitivní datové typy sada datových typů použitelných v konceptuálním modelu zastupují datové typy používané datovým úložištěm EDM nepodporuje kolekce primitivních datových typů Binary Boolean Byte Double DateTime DateTimeOffset Decimal Double Float Guid Int16 Int32 Int64 SByte String Time

Association Type popisují vztah mezi dvěma entitami má dva konce (na každé entitě jeden) jedinečný název omezení referenční integrity (cizí klíč) každý konec má násobnost one (1) zero or one (0..1) many (*)

Entity Container logické seskupení entitních množin, asociací a funkcí

Třída ObjectContext reprezentuje Entity Container používá se pro dotazování a manipulaci s entitami zahrnuje spojení k databázi metadata popisující model (EDM) ObjectStateManager pro sledování stavu objektů nejsou vláknově bezpečné na webu vytvářejte per request, na desktopu per form SaveChanges pro uložení změn do databáze, provádí se v transakci

Třída ObjectStateManager udržuje informace o stavu objektů v kontextu vytváří třídu ObjectStateEntry pro každý objekt uchovává se: klíč stav entity aktuální a původní hodnoty vlastností jména změněných vlastností u POCO entit není stav sledován automaticky a musí se volat DetectChanges na kontextu pro synchronizaci objektového grafu s ObjectStateManager

Stav entity Unchanged Added Modified Deleted Detached Objekt nebyl od svého připojení ke kontextu změněn. Objekt byl přidán a SaveChanges ještě nebyla zavolána. Po zavolání je stav změnen na Unchanged. Jedna z vlastností byla modifikována a SaveChanges ještě nebyla zavolána. Po zavolání je stav změnen na Unchanged. Objekt byl odstraněn z kontextu a SaveChanges ještě nebyla zavolána. Po odstranění je stav změněn na Detached. Objekt existuje, jeho stav ale není sledován. Tento stav má entita po svém vytvoření nebo po volání metody Detach.

Třídy entit vzniklé děděním z třídy EntityObject ObjectContext sleduje vztahy mezi objekty a jejich stav EntityObject má silnou závislost na EF POCO (Plain Old CLR Object) obyčejná třída neví nic o způsobu uložení nemá automatickou detekci změn, EF musí použí snapshot potřebuje více paměti

Třídy entit POCO proxy efektivní, instantní sledování změn a opožděné načtení stejná funkcionalita jako Entity Object, ale stále POCO třídy musí splňovat jisté požadavky POCO proxies dědí od POCO tříd a jsou vytvářeny runtime Self-Tracking Entities sledují svůj vlastní stav nepotřebují Object Context pro přenos entit bez přítomnosti Object Contextu

Přístup k datům object builder metody třída ObjectQuery vytvářená pro nějaký kontext řetězení metod se převádí na dotaz pro databázi LINQ to Entities LINQ pro přístup k entitám převádí se na ObjectQuery Entity SQL jazyk podobný SQL pro dotazy na entity a jejich vztahy Nativní SQL dotazy metody kontextu ExecuteStoreQuery a ExecutyStoreCommand

Načtení objektů 1. entita je součástí dotazu pokud použijete navigační vlastnost při vytvoření dotazu 2. explicitní načtení voláním metody Load nad navigační vlastností nebo referencí nebo LoadProperty na ObjectContext 3. lazy loading nastavení vlastnosti LazyLoadingEnabled kontaineru na true objekty se dotáhnou při prvním použití 4. eager loading zahrnutí do dotazu pomocí Include pokud víte, že to budete potřebovat

Prezentační vrstva Web Web Page Page Aplikační logika (BLL) Managers Managers Datová vrstva (DAL) Entity Framework

Alternativy NHibernate port Hibernate z Javy http://nhforge.org/ FluentNHibernate alternativní konfigurace pro NHibernate Nahrazuje XML statickým C# kódem http://fluentnhibernate.org/ SubSonic http://subsonicproject.com/

LINQ to XML

Přístup k XML v.net Forward-only, non-cached XmlReader, XmlWriter Serializace XML serializace In-Memory Document Object Model (W3C standard) strom v paměti, XmlDocument XPath XPathDocument, XPathNavigator DataSet duální popis dat, jako XML dokument i jako relační model LINQ to XML

LINQ to XML in-memory přístup de-facto přepracovaný XML DOM lehčí a jednodušší model než DOM deklarativní i procedurální přístup pracuje jak s celým dokumentem tak i s fragmenty

Třídy LINQ to XML XObject XAttribute XNode XComment XContainer XText XDocument XElement XName XNamespace

Třídy LINQ to XML XObject uzel nebo atribut XML dokumentu vlastnosti Document, Parent XContainer uzel obsahující další uzly předek pro XDocument a XElement XAttribute atribute XML dokumentu vlastnosti Name, Value XName název pro element, dovoluje složit s definicí jmenného prostoru v proměnné typu v XNamespace (pomocí operátoru +)

Vytvoření XML dokumentu načtením ze souboru nebo proudu XDocument.Load XElement.Load z XmlReaderu XElement.ReadFrom XDocument.ReadFrom ztextového řetězce XDocument.Parse XElement.Parse

Vytvoření XML dokumentu funkcionální konstrukce jedno z přetížení kostruktoru má jako své parametry jméno prvku a obsah elementu obsah elementu může být: XObject, String, decimal, IEnumerable<T>, navíc existuje implicitní konverze String na XName public XElement(XName name, params Object[] content ) public XDocument(params Object[] content)

XDocument doc = new XDocument("people", new XElement("person", new XAttribute("id", 10), new XElement("name", "Prófa")), new XElement("person", new XAttribute("id", 11), new XElement("name", "Šmudla")) ); <people> <person id="10"><name>prófa</name></person> <person id="11"><name>šmudla</name></person> </people>

Klonování a připojování při přidávání nového uzlu do existujícího XML stromu a. pokud není element nemá žádného rodiče, pak se prostě připojí do XML stromu, b. jestliže už rodiče má, pak se vytvoří jeho klon a ten se připojí do XML stromu

Konverze v LINQ to XML LINQ to XML hodně používá explicitní konverze z XElement a XAttribute na základní datové typy a jejich Nullable varianty int int? bool bool? string DateTime Guid Guid? double

age je nepovinný atribut elementu person: <person id="10" age="25" /> XElement person = XAttribute ageattr = person.attribute("age") int? age; if (ageattr == null) age = null; else age = Int32.Parse(ageAttr.Value); XElement person = int? age = (int?) person.attribute("age");

Dotazování XML stromů pomocí metod si můžete zpřístupnit obsah XML dokumentu.element.elements.attribute.attributes.ancestors.descendants

Změna XML dokumentu změnu XML stromu provedete pomocí metod.add,.addbeforeself.setvalue,.setelementvalue,.setattributevalue.remove,.removeall.replacewith uložení změn do souboru, proudu nebo TextWriteru.Save