Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Hasonló dokumentumok
Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté.

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Bevezetés: az SQL-be

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Entity Framework + LINQ oktatási segédlet

Vizuális programozás gyakorlat

Entity Framework alapú adatbáziselérés

Webes alkalmazások fejlesztése 6. előadás. Weblapok fejlesztése és architektúrája (ASP.NET)

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Adatbázisok webalkalmazásokban

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Entity Framework alapú adatbáziselérés

Adatbázis kezelés alapjai I.

Szoftvertechnolo gia 7. gyakorlat

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET Core) Cserép Máté

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

1. beadandó feladat dokumentáció

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Enterprise JavaBeans 1.4 platform (EJB 2.0)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázis, adatbázis-kezelő

Microsoft SQL Server telepítése

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET)

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Az SQL*Plus használata

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Adatbázis kezelés Delphiben. SQL lekérdezések

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET) Cserép Máté.

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

FÉLÉVES FELADAT KÖVETELMÉNYEK

Models are not right or wrong; they are more or less useful.

3. Beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

A könyv tartalomjegyzéke

Adatbázis rendszerek I

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatmodellezés. 1. Fogalmi modell

MDAC - Microsoft Data Access Components

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése Giachetta Roberto

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

SQL DDL-1: táblák és megszorítások

Models are not right or wrong; they are more or less useful.

Adatbázismodellek. 1. ábra Hierarchikus modell

Döbrönte Zoltán. Data Vault alapú adattárház - Fél óra alatt. DMS Consulting Kft.

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Az adatok a vállalat kulcsfontosságú erőforrásai. Az információs rendszer adatai kezelésének két alapvető változata:

BEVEZETÉS Az objektum fogalma

Windows rendszeradminisztráció és Microsoft szerveralkalmazások támogatása. 5. óra. Kocsis Gergely, Supák Zoltán

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

5. Gyakorlat. 5.1 Hálós adatbázis modell műveleti része. NDQL, hálós lekérdező nyelv:

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

Adatbázis használata PHP-ből

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Használati alapú és modell alapú tesztelés kombinálása szolgáltatásorientált architektúrák teszteléséhez az ipari gyakorlatban

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

II. év. Adatbázisok és számítógépek programozása

Adatbázisok - 1. előadás

Rendszermodernizációs lehetőségek a HANA-val Poszeidon. Groma István PhD SDA DMS Zrt.

ADATBÁZIS-KEZELÉS Demetrovics Katalin

B I T M A N B I v: T M A N

Adatbázisok* tulajdonságai

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

SQLServer. SQLServer konfigurációk

Metadirectory koncepció kivitelezése

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 3. előadás Objektumrelációs adatkezelés (ASP.NET) 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Microsoft SQL Server A Microsoft rendelkezik saját SQL adatbázis-kezelő megoldással, a Microsoft SQL Serverrel (MSSQL) az SQL Server Management Studio az alapvető kliens eszköz, de használható Visual Studio is (View/Server Explorer, Tools/Sql Server) saját adatkezelő nyelve van (Transact-SQL), amely kompatibilis az SQL szabvánnyal tartalmaz pár speciális utasítást/típust is, pl. automatikus sorszámozást az IDENTITY utasítással a felhasználó-kezelés támogatja az egyedi fiókokat és Windows authentikációt ELTE IK, Webes alkalmazások fejlesztése 3:2

Az ADO.NET A.NET keretrendszerben az adatbázisokkal kapcsolatos adatelérésért az ADO.NET alrendszer biztosítja elődje az ADO (ActiveX Data Objects) számos lehetőséget ad az adatok kezelésére, az egyszerű SQL utasítások végrehajtásától az összetett objektumrelációs adatmodellekig az egyes adatbázis-kezelőket külön adapterek támogatják, amelyek tetszőlegesen bővíthetőek a közös komponensek a System.Data névtérben, az adatbázis-függő komponensek külön névterekben helyezkednek el (pl. System.Data.SqlClient, System.Data.OleDb) ELTE IK, Webes alkalmazások fejlesztése 3:3

Adatbázis kapcsolat Az adatbázis-kapcsolatot egyben, szöveges formában adjuk meg (connection string) általában tartalmazza a szerver helyét, az adatbázis nevét, a kapcsolódó adatait (felhasználónév/jelszó) a pontos tartalom adatbázis-kezelőnként változik pl.: "Server=localhost;Database=myDataBase; User Id=myUser;Password=myPassword;" // SQL Server standard biztonsággal "Server=127.0.0.1;Port=5432;Database=myDataBase; Integrated Security=true;" // PostgreSQL Windows authentikációval ELTE IK, Webes alkalmazások fejlesztése 3:4

Adatkezelési megoldások Az adatbázisok kezelésének több módja adott a.net keretrendszerben natív kapcsolat: direkt SQL utasítások végrehajtása a fizikai adatbázison logikai relációs modell: a fizikai adatbázis szerveződésének felépítése és adattárolás a memóriában egyszerű objektumrelációs modell (LINQ to SQL): az adatbázis-információk leképezése objektumorientált szerkezetre a sémának megfelelően entitás alapú objektumrelációs modell (ADO.NET Entity Framework): az adatbázis-információk speciális, paraméterezhető leképezése objektumorientált szerkezetre ELTE IK, Webes alkalmazások fejlesztése 3:5

Natív kapcsolatok A natív (direkt) kapcsolat lehetővé teszi adatbázis lekérdezések (SQL) végrehajtását a fizikai adatbázison előnyei: hatékony erőforrás-felhasználás, közvetlen kommunikáció hátrányai: SQL ismerete szükséges, az utasítások a tényleges adatokon futnak (így állandó kapcsolat szükséges az adatbázissal), összetett tevékenységek leírása nehézkes alkalmazás perzisztencia lekérdezés eredmény adatforrás ELTE IK, Webes alkalmazások fejlesztése 3:6

Natív kapcsolatok A kapcsolódást az adatbázishoz az SqlConnection osztály biztosítja a megfelelő kapcsolati szöveg segítségével, pl.: SqlConnection con = new SqlConnection(" "); Az adott kapcsolatban az SqlCommand osztály segítségével tudunk parancsokat létrehozni a CommandText tulajdonság tárolja az utasítást a végrehajtás a parancsokra különféleképpen történik az ExecuteNonQuery() a nem lekérdezés jellegű utasításokat futtatja az ExecuteScalar() az egy eredményt lekérdező utasításokat futtatja ELTE IK, Webes alkalmazások fejlesztése 3:7

Natív kapcsolatok az ExecuteReader() az általános lekérdezéseket futtatja, az eredményt egy SqlDataReader olvasóobjektumba helyezi, amellyel soronként olvasunk Pl.: SqlCommand command = con.createcommand(); command.commandtext = "select * from MyTable"; SqlDataReader reader = command.executereader(); while (reader.read()){ // amíg tudunk olvasni következő sort Console.WriteLine(reader.GetInt32(0) + ", " + reader.getstring(1)); // megfelelően lekérjük az oszlopok tartalmát }; ELTE IK, Webes alkalmazások fejlesztése 3:8

Objektumrelációs adatkezelés Az adatkezelő programokat általában objektumorientáltan építjük fel, így célszerű, hogy az adatkezelés is így történjen A relációs adatbázisokban az adatokat táblákba csoportosítjuk, amely meghatározza az adatok sémáját, felépítésének módját, azaz típusát egy sor tárolja egy adott elem adatait, azaz a sor a típus példánya Ez a megfeleltetés könnyen átültethető objektumorientált környezetre, a sorok adják az objektumokat, a táblák az osztályokat Table «property» + ColumnA() :int + ColumnB() :string + ColumnC() :bool ELTE IK, Webes alkalmazások fejlesztése 3:9

Objektumrelációs adatkezelés A megfeleltetést objektumrelációs leképezésnek (objectrelational mapping, ORM) nevezzük magas szintű transzformációját adja az adatbázisnak, amely a programban könnyen használható ugyanakkor szabályozza az adatok kezelésének módját a létrejött osztályok csak adatokat tárolnak, műveleteket nem végeznek alkalmazás perzisztencia objektumrelációs leképezés adatforrás ELTE IK, Webes alkalmazások fejlesztése 3:10

ADO.NET Entity Framework Az ADO.NET Entity Framework valósítja meg az adatok összetett, objektumrelációs leképezését alapja az entitás adatmodell (Entity Data Model, EDM), amely leírja az entitások társítását az adatforrás elemeihez általában egy entitás egy tábla sorának objektumorientált reprezentációja, de ez tetszőlegesen variálható az entitások között kapcsolatok állíthatóak fel, amely lehet asszociáció, vagy öröklődés támogatja a nyelvbe ágyazott lekérdezéseket (LINQ), a dinamikus adatbetöltést, az aszinkron adatkezelést névtere a System.Data.Entity ELTE IK, Webes alkalmazások fejlesztése 3:11

Entitás adatmodellek létrehozása A modell létrehozására három megközelítési mód áll rendelkezésünkre: adatbázis alapján (database first): az adatbázis-szerkezet leképezése az entitás modellre (az adatbázis séma alapján generálódik a modell) tervezés alapján (model first): a modellt manuálisan építjük fel és állítjuk be a kapcsolatokat (a modell alapján generálható az adatbázis séma) kód alapján (code first): a modellt kódban hozzuk létre A modellben, illetve az adatbázis sémában történt változtatások szinkronizálhatóak, mindkettő könnyen módosítható ELTE IK, Webes alkalmazások fejlesztése 3:12

Entitás adatmodellek létrehozása Pl. (adatbázis): create table Customer( -- tábla létrehozása -- tábla oszlopai Email VARCHAR(MAX) PRIMARY KEY, -- elsődleges kulcs Name VARCHAR(50), AddressId INTEGER, ); -- idegen kulcs CONSTRAINT CustomerToAddress FOREIGN KEY (AddressId) REFERENCES Address (Id) ELTE IK, Webes alkalmazások fejlesztése 3:13

Entitás adatmodellek létrehozása Pl. (kód): class Customer // entitástípus létrehozása { [Key] // elsődleges kulcs public String Email { get; set; } [StringLength(50)] // megszorítás public String Name { get; set; } [ForeignKey("AddressId")] // idegen kulcs public Address Address { get; set; } } public ICollection<Order> Orders { get; set; } ELTE IK, Webes alkalmazások fejlesztése 3:14

Entitás adatmodellek használata Az entitásokat egy adatbázis modell (DbContext) felügyeli, amelyben eltároljuk az adatbázis táblákat (DbSet) egy aszinkron modellt biztosít, a változtatások csak külön hívásra (SaveChanges) mentődnek az adatbázisba pl.: public class SalesContext : DbContext { // kezelő létrehozása public DbSet<Customer> Customers { get; set; } // adatbázisbeli tábla } ELTE IK, Webes alkalmazások fejlesztése 3:15

Entitás adatmodellek használata Az adattábla (DbSet) biztosítja lekérdezések futtatását, adatok kezelését létrehozás (Create), hozzáadás (Add, Attach), keresés (Find), módosítás, törlés (Remove) az adatokat és a lekérdezéseket lusta módon kezeli az adatok csak lekérdezés hatására töltődnek a memóriába, de betölthetjük őket előre (Load) a LINQ lekérdezések átalakulnak SQL utasítássá, és közvetlenül az adatbázison futnak egy tábla nem tárolja a csatolt adatokat, azok betöltése (Include) ELTE IK, Webes alkalmazások fejlesztése 3:16

Entitás adatmodellek használata Pl.: SalesContext db = new SalesContext(); IEnumreable<Customer> customer = Db.Customers.FirstOrDefault(cust => cust.email == "groberto@inf.elte.hu"); // LINQ lekérdezés if (customer == null) { customer = new Customer { Name = "Roberto", Email = "groberto@inf.elte.hu" }; db.customers.add(customer); // entitás létrehozása és felvétele db.savechanges(); // változások elmentése } ELTE IK, Webes alkalmazások fejlesztése 3:17

Entitás adatmodellek használata Pl.: IQuery<Customer> query = db.customers.include(cust => cust.address); // a megadott tulajdonságok (csatolt adatok) // is betöltésre kerülnek, hasonlóan // táblanévvel:.include("address") Boolean anybudapest = query.any(cust => cust.address.city == "Budapest"); // a lekérdezés az adatbázisban fut query.load(); // adatok betöltése anybudapest = query.any(cust => cust.address.city == "Budapest"); // a lekérdezés a memóriában fut ELTE IK, Webes alkalmazások fejlesztése 3:18

Példa Feladat: Valósítsuk meg egy utazási ügynökség weblapját, amelyben apartmanok között böngészhetünk. a főoldalon (Index) az épületek alapvető adatai listázódnak, amit szűrhetünk, a részletek oldalon (Details) egy épület apartmanjai listázódnak az oldalt egy vezérlő (HomeController) irányítja, amely három akciót definiál: minden listázása (Index), egy város épületeinek listázása (List), egy épület részleteinek lekérése (Details) a városok listázásához felhasználjuk a ViewBag tulajdonságot az adatokat adatbázisban (TravelAgency) tároljuk ELTE IK, Webes alkalmazások fejlesztése 3:19

Példa Tervezés (adatbázis): a City tábla tárolja a városok adatait tartalmazza a Building tábla az épületek adatait tartalmazza, benne a város azonosítójával az Apartment tábla az apartman adatokat tárolja, benne az épület azonosítójával a BuildingImage tábla tárolja az épületek bemutató képeit, minden képből egy nagyobb, és egy kisebb változatot, valamint az épület azonosítóját az elsődleges kulcsokat automatikusan generáljuk az adatbázist entitásmodell segítségével töltjük be az alkalmazásban ELTE IK, Webes alkalmazások fejlesztése 3:20

Példa Tervezés (adatbázis): ELTE IK, Webes alkalmazások fejlesztése 3:21

Példa Tervezés (alkalmazás): Controller Controllers::HomeController - _entities :TravelAgencyEntities + HomeController() + Index() :ActionResult + List(Int32) :ActionResult + Details(Int32) :ActionResult View Views::Index View Views::Details -_entities DbContext Models::TravelAgencyEntities ELTE IK, Webes alkalmazások fejlesztése 3:22

Példa Megvalósítás (HomeController.cs): public ActionResult List(Int32 cityid) { // ha hibás az azonosító if (!_entities.city.any(c => c.id == cityid)) return HttpNotFound(); // átirányítjuk a nem talált oldalra } // megkeressük a megfelelő város szonosítókat return View("Index", _entities.building.include("city").where(b => b.cityid == cityid)); ELTE IK, Webes alkalmazások fejlesztése 3:23

Példa Megvalósítás (Index.cshtml): <ul> @* felsoroljuk a városokat *@ @foreach (City city in ViewBag.Cities) { <li> @* létrehozunk egy linket minden városra *@ @Html.ActionLink(city.Name, "List", new { cityid = city.id }) </li> } </ul> ELTE IK, Webes alkalmazások fejlesztése 3:24