Entity Framework + LINQ oktatási segédlet



Hasonló dokumentumok
Entity Framework alapú adatbáziselérés

Entity Framework alapú adatbáziselérés

Szoftvertechnolo gia 7. gyakorlat

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

Access adatbázis elérése OLE DB-n keresztül

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

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

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

Entity Framework alapú adatbáziselérés 2

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Vizuális programozás gyakorlat

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

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

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 (Entity Framework) Cserép Máté.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

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

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

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Vizuális programozás gyakorlat

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Szoftvertechnolo gia gyakorlat

C#---Access adatbáziskezelési gyakorlat

Egyszerű alkalmazás fejlesztése JDeveloperben

Vizuális, eseményvezérelt programozás I.

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Swing GUI készítése NetBeans IDE segítségével

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Adatbázis-kezelés ODBC driverrel

Programozási technológia

Microsoft SQL Server telepítése

OKTATÓANYAG. Cseh Péter. Webes alkalmazás készítése JDeveloper segítségével CSPOAAI.ELTE

BME MOGI Gépészeti informatika 7.

munkafüzet open eseményéhez

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási nyelvek Java

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

FELHASZNÁLÓI ÚTMUTATÓ

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

Dokumentum létrehozása/módosítása a portálon:

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

KISZÁLLÍTÁSI SEGÉDLET 1

Ugráló gomb oktatási segédlet Ugráló gomb

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

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

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

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

1. Nyissa meg a honlapot. 2. Kattintson a Rendelek. 3. Adja meg a felhasználónevét és jelszavát. 4. Kattintson a Belépés

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

BME MOGI Gépészeti informatika 6.

Elmé léti vizsgajéléntő kia llí ta sa

3. Osztályok II. Programozás II

C#, OOP. Osztályok tervezése C#-ban

Készítsen egy adatbázist (egytáblásat) egy számítástechnikai tanfolyam résztvevőiről. Az adattábla rögzítse a következőket:

Eseményvezérelt és objektumorientált programozás

libgdx alapok, első alkalmazás

Osztályok. 4. gyakorlat

1. Az Access 2000 indítása után válasszuk az Üres adatbázis létrehozása pontot,

Android Commander Felhasználói kézikönyv

BarAck.Net. Internetes csomagkezel. Felhasználói kézikönyv V 1.0. (2011. július 20.)

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

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

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

ASP.NET 2.0 (Whidbey)

Webshop készítése ASP.NET 3.5 ben I.

Rendszergazda kézikönyv

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Adatbázis kezelés alapjai I.

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

A Java nyelv. Dialógus ablakok. Elek Tibor

ZH mintapélda. Feladat. Felület

(ArcCatalog, ArcMap)

FÉLÉVES FELADAT KÖVETELMÉNYEK

Stateless Session Bean

DEHNsupport Toolbox - Kockázatelemzés Régi projektek megnyitása + mentés DEHN + SÖHNE / protected by ISO 16016

Tantárgyfelosztás. I. Ellenőrzés. Mielőtt hozzákezd a tantárgyfelosztás tervezéséhez, ellenőrizze le, illetve állítsa be a következőket:

A folyamat nagy vonalakban

OOP #14 (referencia-elv)

Access gyakorlati feladatok lépésről lépésre

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Felhasználói útmutató

PHP-MySQL. Adatbázisok gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

A First Businesspost Sender Cockpit használata

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Android Commander Felhasználói kézikönyv

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Elektronikus pályázati űrlap (eform) létrehozása - Útmutató

Átírás:

Entity Framework + LINQ oktatási segédlet Török János Zsolt 2.0. változat Célok: - Ismerkedés az Entity Framework el - Adatbázis lekérdezések létrehozása LINQ segítségével Feladat: Megrendeléseket kezelő kétrétegű (UI + DAL) alkalmazás készítése. Lehetséges megvalósítás: 1. Projektek létrehozása Első lépésként hozzuk létre a projekteket és hozzuk létre közöttük a kapcsolatot. A UI egy Windows Forms alkalmazás lesz, amely az adatok megjelenítéséért, módosításáért felel, a projekt neve OrderUI. Ezután adjunk hozzá még egy projektet a solution-höz, amely legyen Class Library projekt és kapja a OrderDAL nevet. Ez a projekt lesz a felelős az adatbázis elérésért.

Végezetül adjuk hozzá a UI projekthez a DAL projekt referenciáját. Ezzel biztosítjuk, hogy a UI felől elérhetőek lesznek a DAL-on publikusként kivezetett objektumok és metódusok. 2. Entitás modell elkészítése Model First megközelítés segítségével Tervezzük meg az adatokat tároló objektumokat, és ezzel a relációs adatbázist is a Model First megközelítés segítségével. a. Az OrderDAL projekthez adjunk hozzá egy ADO.NET Entity Data Model elemet, amely az Entity Framwork-ös adatelérés központi eleme, magát a modellt fogja tartalmazni, azaz a objektumok és relációs adatok közötti összerendeléseket.

b. A What should the model contain? kérdés megjelenésekor válasszuk az Empty Model-t (Model First Approach). Ekkor megjelenik a model designer, amelyen meg lehet tervezni az adatmodellt. c. A modell kialakítása előtt tegyünk meg még két dolgot: egyrészt a modell tulajdonságlapján állítsuk a Pluralize new objects tulajdonságot true-ra, ezzel biztosítva az entitás kollekciók megfelelő elnevezését. Másrészt kapcsoljuk be a skaláris tulajdonságok típusainak mutatását: jobb gomb a modell-en -> Scalar property format -> Display name and type. d. A feladat megvalósításához szükségünk van a következő entitások tárolásáravisszaolvasására: i. Vevők alapadatai (név, cím) ii. Termékek alapadatai (megnevezés, ár) iii. Rendelések (ki a megrendelő, rendelés ideje) iv. Rendelések részletei (mely termékeket és hány darabot tartalmaz a megrendelés? Ezek alapján rajzoljuk meg az entitásokat (toolbox - entity), valamint a közöttük lévő kapcsolatokat (toolbox - association):

A modell felépítésekor figyeljünk oda a entity property-k helyes adattípusának beállítására, valamint a navigation property-k szingularizálására (ha beállítjuk a modellen a Pluralize new objects tulajdonságot true-ra, ezt a designer elvégzi helyettünk). További információk a model-first tervezéshez: http://msdn.microsoft.com/en-us/data/ff830362 e. Végezetül generáljuk le az adatbázis szkriptet, és futtassuk le az adatbázison: jobb egérgomb a modellen és válasszuk a Generate Database from Model menüpontot. Első lépésként az adatbázishoz történő csatlakozás paramétereit kell beállítanunk. Amennyiben nincs a legördülő listában megfelelő connection string, úgy a New Connection gombra kattintva tudjuk beállítani a SQL szerver paramétereit. A legfontosabb a szerver nevét és a login metódust beállítani, ezután pedig az adatbázist kiválasztani.

f. A Next gombra kattintva létrejön az adattáblákat és a köztük lévő kapcsolatokat leíró adatbázis szkript, amely a Finish-re kattintva megnyitásra is kerül a Visual Studio-ban az DAL projekt részeként. Ezzel a lépéssel az adatbázis táblák és oszlopok automatikusan hozzárendelődnek a Model Designer-ben megtervezett objektuomokhoz és azok propertyjeihez. Az Execute SQL ikonra kattintva a szkript futtatásra kerül a connection string-ben meghatározott adatbázison. A Server Explorer Data Connections szekciójában leellenőrizhetjük a létrejött adatbázis struktúrát: 3. Az adatelérő osztály implementálása Ahhoz, hogy a modellünkön deklarált objektumokat el tudjuk érni a UI-on, ki kell vezetni őket. A kivezetéshez írjuk át a DAL projekt létrehozásakor automatikusan létrejött Class1 osztályunkat: az osztály neve legyen OrderDALC, tagváltozója legyen a példányosított OrderModelContainer, amelyen keresztül elérhetőek az entitásaink és a köztük lévő kapcsolatok, valamint definiáljunk két metódust.

Az egyik az adatbázisban található összes terméket adja vissza, a másik pedig visszamenti az adatbázisba a modelcontainer-en történt változtatásokat: public class OrderDALC OrderModelContainer omc = new OrderModelContainer(); public IEnumerable<Product> GetProducts() return omc.products.orderby(p => p.name); public int SaveChanges() return omc.savechanges(); A későbbiekben ezt az osztályt fogjuk bővíteni metódusokkal, amikor további adatokra lesz szükségünk az adatbázisból. 4. A fő ablak megtervezése Először alakítsuk át a fő form-ot, amely a projekt létrehozásakor a Form1 nevet. Nevezzük át frmmain-re és design-oljuk meg a következőképpen: Ahhoz hogy az alkalmazás elérhesse az adatokat az OrderDAL dll-en keresztül két dolgot kell még beállítani: a System.Data.Entity referenciát is hozzá kell adni az OrderUI projekthez, valamint az App.config-ot át kell másolni az OrderDAL projektből, mert az OrderDALC példányosításakor szükség van a connectionstring-re.

A Termékek adminisztrálása gombra kattintva ugorjon fel egy új form, amelyen a termékeket lehet feltölteni / módosítani: private void btnproducts_click(object sender, EventArgs e) frmproducts productsform = new frmproducts(dalc); productsform.show(); 5. Termékek adminisztrálása A termékek form-ot tervezzük meg a következőképp: az adatokat datagridview kontroll segítségével menedzseljük. A kontrollon jobb gombbal kattintva nyílik lehetőség az oszlopok szerkesztésére. Itt vegyük fel a megjelenítendő oszlopokat figyelve arra, hogy az összrendeléshez az oszlopok DataPropertyName property-jét is kitöltsük a termék entitás megfelelő property-jével. Az frmproducts osztály code behind-ja: public partial class frmproducts : Form OrderDALC dalc; public frmproducts() InitializeComponent(); public frmproducts(orderdalc paramdalc) InitializeComponent(); dalc = paramdalc; dgvproducts.autogeneratecolumns = false; dgvproducts.datasource = dalc.getproducts(); private void btnsave_click(object sender, EventArgs e)

dalc.savechanges(); this.close(); Ugyanilyen módon implementáljuk a vevők adminisztrálását is. 6. Megrendelések form implementálása Az frmorders szolgál a meglévő megrendelések listázására és ezen a form-on helyezzük el azt a gombot, amely segítségével új megrendelést fogunk tudni felvenni: Az összérték oszlop egy lehetséges megvalósítása mutatja igazán az erejét az Entity Framework-nek: tekintve, hogy az Entity Framework a létrehozott entitás osztályokat parciálisként implementálja, nekünk is lehetőségünk van új tulajdonságokat és metódusokat rendelni az entitáshoz. Adjunk hozzá egy új class-t az OrderDALC projektünkhöz, amelyben egy új TotalValue tulajdonságban nyerjük ki az adott rendelés összértékét: public partial class Order public int TotalValue get return this.orderdetails.sum(d => d.quantity * d.product.price); Az összértékhez hasonló módon implementáljuk a vevő oszlopot is (itt érdemes két lépésben gondolkodni: először egy FullName property-t hozzáadni a Customer osztályhoz, majd az Order osztályt kiegészíteni CustomerName property-vel). A helyes működéshez állítsuk false-ra a datagridview-n az AllowUserToAddRows és az AllowUserToDeleteRows tulajdonságokat. A rendelés részleteinek megtekintéséhez adjunk egy DataGridViewButtonColumn-t a grid-hez:

7. Új megrendelés valamint meglévő megrendelés részletei Az új megrendelésekhez, valamint a meglévő megrendelések részleteinek a megtekintéséhez ugyanazt a form-ot fogjuk használni. Ehhez hozzuk létre az frmorderdetails nevű form-ot a következő design-al: Az frmorders form-on a következőképp szabályozzuk az frmorderdetails form megjelenítését: private void btnnew_click(object sender, EventArgs e) frmorderdetails orderdetailsform = new frmorderdetails(dalc, null); if (orderdetailsform.showdialog() == DialogResult.OK) // Because of lazy loading ToList() forces to reload data from db dgvorders.datasource = dalc.getorders().tolist();

private void dgvorders_cellclick( object sender, DataGridViewCellEventArgs e) int orderid = int.parse( dgvorders.rows[e.rowindex].cells[0].value.tostring()); Order order = dalc.getorder(orderid); frmorderdetails orderdetailsform = new frmorderdetails(dalc, order); orderdetailsform.showdialog(); Meglévő megrendelés megjelenítéséhez szükség van magára a megrendelésre, ehhez kiegészítjük az OrderDALC osztályt a következő metódussal: public Order GetOrder(int orderid) return omc.orders.single(o => o.id == orderid); Új megrendelés és a részleteinek elmentéséhez további metódusokkal egészítjük ki az adatelérő komponensünket: public Order AddOrder(string remark, Customer customer) Order order = new Order() OrderDate = DateTime.Now, Remark = remark, Customer = customer ; omc.orders.addobject(order); return order; public void AddOrderDetail(Order order, Product product, int quantity) OrderDetail detail = new OrderDetail() Order = order, Product = product, Quantity = quantity ; omc.orderdetails.addobject(detail); Ezek után az frmorderdetails code behind-ja a következőképp alakul: public partial class frmorderdetails : Form OrderDALC dalc; Order order; public frmorderdetails()

InitializeComponent(); public frmorderdetails(orderdalc paramdalc, Order paramorder) InitializeComponent(); dalc = paramdalc; order = paramorder; cbcustomers.datasource = dalc.getcustomers(); cbcustomers.valuemember = "Id"; cbcustomers.displaymember = "FullName"; dgvorderdetails.autogeneratecolumns = false; IEnumerable<Product> products = dalc.getproducts(); foreach (Product product in products) dgvorderdetails.rows.add(new object[] product, product.name, 0); if (order == null) this.text = "Új megrendelés felvitele"; btndo.text = "Ment és bezár"; else this.text = order.id + ". számú megrendelés részletei"; cbcustomers.selecteditem = order.customer; cbcustomers.enabled = false; txtremark.text = order.remark; txtremark.readonly = true; dgvorderdetails.enabled = false; foreach (OrderDetail detail in order.orderdetails) foreach (DataGridViewRow row in dgvorderdetails.rows) if (row.cells["product"].value == detail.product) row.cells["quantity"].value = detail.quantity; btndo.text = "Bezár"; private void btndo_click(object sender, EventArgs e) if (order == null) Order neworder = dalc.addorder( txtremark.text, (Customer)cbCustomers.SelectedItem); foreach (DataGridViewRow row in dgvorderdetails.rows)

if (row.cells["quantity"].value.tostring()!= "0") dalc.addorderdetail( neworder, (Product)row.Cells["Product"].Value, int.parse(row.cells["quantity"].value.tostring())); dalc.savechanges(); this.close(); További feladatok A program ne engedjen törölni olyan vevőket illetve termékeket, amelyek már szerepelnek valamely megrendelésben! Alakítsa át az frmorderdetails form-ot úgy, hogy az csak annyi terméket mutasson a gridben, ahány a megrendeléshez tartozik! Ne engedjen termék nélküli megrendeléseket felvinni! Figyeljen arra is, hogy amennyiben mentéskor ugyanaz a termék többször is szerepel, akkor dobjon fel figyelmeztető ablakot és biztosítson lehetőséget az ablakban a végleges darabszám beírására.