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

Hasonló dokumentumok
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 10. 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 (ASP.NET)

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

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 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

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

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

Vizuális programozás gyakorlat

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

Entity Framework + LINQ oktatási segédlet

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

Bevezetés: az SQL-be

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

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.

Adatbázisok webalkalmazásokban

Adatmodellezés. 1. Fogalmi modell

Adatbázis kezelés alapjai I.

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

Szoftvertechnolo gia 7. gyakorlat

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

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

A feladatok kitűzése és megoldása előtt néhány szó az alkalmazásokban használt eszközökről. ADO.NET osztályai

Entity Framework alapú adatbáziselérés

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

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

MDAC - Microsoft Data Access Components

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

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

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):

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

BBS-INFO Kiadó

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

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

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

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

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

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

Az SQL*Plus használata

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

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

Adatbázis rendszerek I

Entity Framework alapú adatbáziselérés

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

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

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

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

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

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

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

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

1. beadandó feladat dokumentáció

A könyv tartalomjegyzéke

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

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

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Adatbázis használata PHP-ből

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

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

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

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

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

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

Adatbázis-kezelés. Harmadik előadás

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbáziskezelés Delphi 5 alatt. Bese Antal

Adatbázisok* tulajdonságai

BEVEZETÉS Az objektum fogalma

Készítette: Szabóné Nacsa Rozália

Adatbázismodellek. 1. ábra Hierarchikus modell

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

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

FÉLÉVES FELADAT KÖVETELMÉNYEK

Szathmáry László Debreceni Egyetem Informatikai Kar

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

Adatbázisok - 1. előadás

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

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

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

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Adatbázis Rendszerek II. 8. Gyakorló környezet

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

3. Beadandó feladat dokumentáció

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

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

ANDROID ALKALMAZÁSFEJLESZTÉS

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

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Adatbázisok gyakorlat

Adatmodellezés, alapfogalmak. Vassányi István

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

Á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 (Entity Framework) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu

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 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

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 ELTE IK, Webes alkalmazások fejlesztése 3:9

Logikai relációs modell Az adatbázis fizikai szerveződését a programkódban általános típusokra tükrözzük a System.Data névtérből: az adatbázisoknak a DataSet, a tábláknak a DataTable kerül megfeleltetésre, a sorokat a DataRow, a mezőket a DataColumn típus reprezentálja, relációs kapcsolatok a DataRelation, egyéb megszorítások a Constraint objektumokkal írhatók le. A DataSet-be az adatok a DataAdapter-en keresztül kerülnek betöltésre és a módosítások szinkronizálásra az adatbázissal. Az értékek nem erősen típusozottak (Object). ELTE IK, Webes alkalmazások fejlesztése 3:10

Logikai relációs modell 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) ); ELTE IK, Webes alkalmazások fejlesztése 3:11

Logikai relációs modell létrehozása Pl. (kód): // a connection érvényes SqlConnection objektum string querystring = "SELECT * FROM Customers"; SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection); DataSet dataset = new DataSet(); adapter.fill(dataset, "Customers"); DataTable table = dataset.tables["customers"]; DataRow newrow = table.newrow(); newrow["email"] = "mcserep@inf.elte.hu"; newrow["name"] = "Máté"; // sor hozzáadása a kollekcióhoz table.rows.add(newrow); ELTE IK, Webes alkalmazások fejlesztése 3:12

Logikai relációs modell lekérdezése Pl. (kód): // az összes tábla összes rekordjának kiírása foreach(datatable table in dataset.tables) { foreach(datarow row in table.rows) { foreach(datacolumn column in table.columns) { Console.WriteLine(row[column]); } } } ELTE IK, Webes alkalmazások fejlesztése 3:13

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 ELTE IK, Webes alkalmazások fejlesztése 3:14

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:15

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:16

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:17

ADO.NET Entity Framework Az Entity Framework, a.net Core keretrendszer esetében az EF Core 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 Microsoft.EntityFrameworkCore ELTE IK, Webes alkalmazások fejlesztése 3:18

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:19

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:20

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:21

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:22

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:23

Entitás adatmodellek használata Pl.: SalesContext db = new SalesContext(); IEnumreable<Customer> customer = db.customers.firstordefault(cust => cust.email == "mcserep@inf.elte.hu"); // LINQ lekérdezés if (customer == null) { customer = new Customer { Name = "Cserép Máté", Email = "mcserep@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:24

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:25

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:26

Példa Tervezés (entitás modell): a City entitás tárolja a városok adatait tartalmazza a Building entitás az épületek adatait tartalmazza, benne a város azonosítójával az Apartment entitás az apartman adatokat tárolja, benne az épület azonosítójával az adatbázist entitásmodell alapján, code-first módon hozzuk létre alkalmazásban, amennyiben nem létezik az elsődleges kulcsokat az adatbázis perzisztáláskor automatikusan generálja ELTE IK, Webes alkalmazások fejlesztése 3:27

Példa Tervezés (adatbázis): Cities Column Name Condensed Type Buildings Column Name Condensed Type Apartments Column Name Condensed Type Id int Id int Id int Name nvarchar(max) CityId int BuildingId int Comment nvarchar(max) Comment nvarchar(max) LocationX float Price int LocationY float Room int Name nvarchar(max) Turnday int SeaDistance int ShoreId int ELTE IK, Webes alkalmazások fejlesztése 3:28