EDMX - macromedia future award
Download
Report
Transcript EDMX - macromedia future award
Univerzitet u Beogradu
Fakultet organizacionih nauka
Primena Entity Framework-a u
izradi veb aplikacija
Završni rad
Komisija:
Student:
Dr doc. Saša D. Lazarević, mentor
Dr Siniša Vlajić, član komisije
Dr Slađan Babarogić, član komisije
Aleksandar Ilić, 232/05
Sadržaj
Definisanje problema
Tehnologije
Entity Framework
Karakteristike veb aplikacija
Često se oslanjaju na različite baze podataka
Obično koriste relacione baze podataka (SQL dijalekti)
Zasnovane na objektno-orijentisanoj paradigmi
Problemi savremenih veb
aplikacija
Jaz između objektnog i relacionog modela
Potrebno poznavanje različitih jezika za upite nad
bazom podataka
Programska logka prilagođena jednoj vrsti baze
podataka – promena baze podataka iziskuje krupne
izmene u programskoj logici
Rešenje
Omogućiti da logika veb aplikacije bude nezavisna od
baze podataka na koju se oslanja
Omogućiti promenu tipa baze podataka uz minimalne
promene u programskoj logici
Obezbediti kreiranje baze podataka bez znanja jezika
za upite nad bazom
Tehnologije
Entity Framework
LINQ
ASP.NET
Razor view engine
Microsoft Visual Web Developer Express 2010 C#
SQL Server Express
IIS Express Web Server
ASP.NET
Deo .NET-a koji sadrži skup servisa za izradu veb
aplikacija
Veb aplikacije se mogu pisati u bilo kom CLR
(Common Language Runtime) jeziku (Visual Basic,
C#..)
Vrste ASP.NET projekata:
Web site
Web application
Web service
AJAX serverske kontrole
ASP.NET - MVC
MVC – Model - View – Controller
Razdvajanje strukture aplikacije u više logičkih slojeva
Tri logičke celine:
Modeli – zaduženi za rad sa podacima
Pogledi – zaduženi za korisnički interfejs
Kontroleri – zaduženi za obradu zahteva korisnika
LINQ
LINQ – Language INtegrated Query
Programski model kojim se proširuje funkcionalnost programskih
jezika u .NET-u
Omogućava pristup različitim tipovima kolekcija podataka korišćenjem
upita iste ili slične sintakse
Upiti podsećaju na SQL
Upiti se prevode u odgovarajuće programske kodove prilikom
izvršavanja programa
Implementacije:
LINQ za objekte
LINQ za ADO.NET:
LINQ za SQL
LINQ za entitete
LINQ za DataSet
LINQ za XML
Razor View Engine
Programska sintaksa za kreiranje šablona dinamičkih
veb stranica
Omogućava integrisanje C# i/ili VB sa HTML-om
Nije potrebno znanje novog jezika
Microsoft Visual Web Developer
Express 2010 C#
Integrisano razvojno okruženje
Specijalizovano za ASP.NET i kreiranje veb aplikacija
Podržava .NET 4.0
IIS Express Web server
Verzija IIS Web servera prilagožena za rad u
razvojnom okruženju
Podržava URL rewrite i može da pokrene ASP.NET
MVC aplikacije
Nalazi se u sklopu Visual Studio-a
Podržani protokoli: HTTP, HTTPS, WCF preko HTTP
Pokreće se i zaustavlja od strane korisnika i ne zahteva
administratorska prava
Omogućava rad više korisnika na istom računaru
SQL Server 2008 Express
Sistem za relacione baze podataka razvijen od strane
Microsoft-a
Podrška za jezike upita
T-SQL
ANSI-SQL
SQL Server Express je besplatna verzija SQL Server-a
Entity Framework
Alat za objektno-relaciono preslikavanje (ORM –
Object-Relational Mapping)
Oslanja se na model podataka entiteta (EDM – Entity
Data Model)
Ključne komponente
EDM metapodaci
Objektni servis
EntityClient
ADO.NET Data Provider
Entity Framework - EDM
Srž Entity Framework-a
Zasniva se na modelu relacija entiteta (ERM – Entity
Relationship Model)
Entiteti definišu strukturu, ne i ponašanje
Entitet je sličan šemi tabele u bazi, s tim što opisuje
domensku klasu
EDM omogućava programerima da preuzimaju podatke
iz relacione baze, populišu entitete a zatim i snime
eventualne izmene nad njima
Entity Framework - Entiteti
Delovi konceptualnog modela opisani pomoću EDM-a
Domenske klase generisane na osnovu entiteta – klase
entiteta ili objekti entiteta
Klase entiteta se razlikuju od domenskih klasa po tome
što klase entiteta sadrže samo atribute, ne i metode
(osim GET i SET)
Moguće je definisati relacije između entiteta
EDM - metapodaci
Implementacija EDM u Entity Frameworku je sadržana
u tri XML fajla (tokom izvršenja programa)
Prilikom pisanja programa, sva tri fajla su spojena u
jedan, EDMX fajl
EDMX sadrži:
Konceptualni model
Model baze podataka
Specifikaciju preslikavanja
Ove tri komponente postaju tri zasebna fajla tokom
izvršenja programa
EDMX
Sve tri komponente imaju svoju XML definiciju unutar
EDMX fajla:
CSDL (Conceptual Schema Definition Language) za opis
šeme konceptualnog modela / konceptualna šema
SSDL (Storage Schema Definition Language) – za opis
šeme modela baze podataka / šema baze podataka
MSL (Mapping Specification Language) – za opis
preslikavanja između šeme konceptualnog modela i
modela baze podataka / šema preslikavanja
EDMX - CSDL
Konceptualna šema je unutar
<edmx:ConceptualModels></edmx:ConceptualModels
> elementa
Opisuje entitete, kolekcije entiteta i relacije između njih
Sastoji se iz sledećih elemenata
EntityContainer
EntitySet
AssociationSet
EntityType
EDMX – CSDL
EntityContainer element je obmotnica (wrapper) za
EntitySet i AssociationSet elemente u CSDL-u
Ulazna tačka za upite jer se u EntitySet elementima
definišu kolekcije entiteta koje se koriste prilikom
pisanja upita
EntitySet opisuje kolekciju jednog tipa entiteta
EntitySet ima dva atributa
Name – sam naziv kolekcije entiteta
EntityType – definiše tip entiteta i odgovara EntityType
elementima
EDMX – CSDL
EntityType opisuje entitete u konceptualnom modelu
Ima atribut Name koji definiše ime entiteta
Elementi unutar EntityType:
Key – definiše koji su atributi entiteta ključevi
(identifikatori)
Property – definiše sve atribute entiteta u smislu naziva,
tipa podataka, podrazumevanih vrednosti itd.
NavigationProperty – usko povezani sa relacijama
između entiteta. Opisuju reference ka zavisnim entitetima
ili kolekcijama entiteta, opisanim u AssociationSet
elementima
EDMX – CSDL
AssociationSet opisuje relacije između entiteta u
konceptualnom modelu
Ima atribut Name koji definiše naziv relacije
U Database - first pristupu podrazumevana vrednost ovog
atributa je ista kao i naziv spoljnog ključa
Association atribut sadži ime i prefiks koji predstavlja naziv
modela
U okviru AssociationSet elementa se nalaze End elementi
Oni opisuju krajeve relacije tj entitete koji su u vezi:
Role atribut definiše entitet koji učestvuje u vezi
EntitySet definiše kolekciju tog entiteta
EDMX - SSDL
Šema baze podataka je u EDMX-u smeštena unutar
<edmx:StorageModels></edmx:StorageModels>
Postoje EntityType i Property tagovi kao i u CSDL-u s
tim što opisuju strukturu tabela u bazi i kolone
Po strukturi, dosta je sličan CSDL-u
Razlike su:
Schema element ima atribut Namespace koji se zaršava
.Store sufiksom – čime se ukazuje da je u pitanju šema
(model) baze podataka
Postoji element ProviderManifestToken koji sadrži
informaciju o vrsti baze podataka na koju je povezana
aplikacija
EDMX - SSDL
Slično CSDL-u, postoje i Assocation, AssociationSet i
ReferentialConstraint
Association element, pored već pomenutih End elemenata,
ima i OnDelete element koji opisuje šta se dešava sa
zavisnim entitetom prilikom brisanja glavnog entiteta
ReferentialConstraint element opisuje pravac relacije
između tabela u bazi, koristeći elemente Principal i
Dependent
Dependent element opisuje tabelu koja sadrži u sebi
referencu na neku drugu tabelu preko spoljnog ključa
Principal element opisuje tabelu na koju pokazuje
Dependent element
EDMX - MSL
Šema preslikavanja modela baze podataka u model
entiteta se nalazi između
<edmx:Mappings></edmx:Mappings> tagova
Služi za mapiranje entiteta baze podataka u entitete
konceptualnog modela
Sadrži sledeće elemente
Mapping
EntityContainterMapping
EntitySetMapping
EntityTypeMapping
MappingFragment
ScalarProperty
EDMX - MSL
Mapping predstavlja koreni element MSL-a
EntityContainerMapping je dete Mapping elementa i predstavlja
kontejner za sva preslikavanja u modelu
EntitySetMapping se nalazi unutar EntityContainerMapping i
unutar njega se definišu preslikavanja na nivou jednog entiteta
EntityTypeMapping je definisan za svaki EntityType element koji
se nalazi u CSDL-u. U TypeMapping atributu se nalazi naziv
EntityType elementa iz CSDL-a
MappingFragment definiše tabelu u bazi koja se preslikava u
odgovarajući entitet. Za svaku tabelu postoji odgovarajući mapping
fragment. StoreEntitySet atribut ovog elementa se odnosi na
odgovarajući EntitySet u SSDL-u
ScalarProperty elementi preslikavaju naziv atributa iz CSDL u
odgovarajući atribut entiteta u SSDL-u (kolona u tabeli)
Entity Framework – Objektni servis
Skup ključnih funkcionalnosti u EF-u
Najčešće se koristi prilikom pisanja aplikacije
Nalazi se na vrhu strukture i omogućava rad sa
objektima entiteta
Objektni servis definše EntityObject klasu
Pomoću nje, objektni servis upravlja svim klasama
izvedenim iz EntityObject klase (objekti entiteta)
Kreiranje objekata entiteta
Praćenje izmena u objektima
Upravljanje relacijama
Snimanje izmena
Entity Framework – Praćenje izmena
Instanciranjem objekta klase EntityObject, omogućava
se objektnim servisima da “prate” taj objekat
Prate se izmene na vrednostima atributa objekta kao i
izmene objekata koji su u relaciji sa praćenim objektom
U trenutku snimanja objekta – objektni servis koristi
prikupljene informacije o nastalim izmenama
Na osnovu izmena generišu se odgovarajući SQL upiti
za svaki dodati, izmenjeni ili obrisani objekat.
Porede se postojeće vrednosti sa originalnim
vrednostima (ukoliko one postoje)
Entity Framework - EntityClient
Aplikacioni interfejs koji omogućava komunikaciju sa
bazom
Omogućava izvršenje komandi i upita za smeštanje,
brisanje i preuzimanje podataka iz baze
Prilagođava rezultate preuzimanja podataka iz baze
kako bi adekvatno mogli da se koriste od strane EDM-a
Najčešće se koristi od strane objektnog servisa
Nije namenjen za direktno korišćenje
Entity Framework – ADO.NET Data
Provider
Zajednički interfejs u .NET frejmvorku za povezivanje i
komunikaciju sa bazom podataka
U strukturi EF-a, sve ostale komponente su izgrađene
nad njom
Predstavlja most između EF i baze podataka
Pruža interfejse za konekciju sa:
Microsoft SQL
MySQL
SQLite
PostgreSQL
Oracle
Kreiranje EDM-a
EDM se u EF može kreirati na više načina:
Database – first pristupom
Model – first pristupom
Database – first pristup predstavlja kreiranje EDM-a na
osnovu postojeće baze podataka
Model – first pristup predstavlja kreiranje EDM-a
pomoću alata Model Designer i kreiranje baze
podataka na osnovu modela
EDM – Database First
Omogućava jednostavno kreiranje EDM-a i generisanje
domenskih klasa na osnovu postojeće baze podataka
Baza se može uvesti na dva načina
Uvoženjem .mdf fajla koji u sebi nosi strukturu baze
Povezivanjem sa serverom baze podataka
Database First
Pretpostavićemo da je Web projekat već kreiran u
Visual Studio-u
Database First – kreiranje modela
Entity Model kreira se tako što u Models direktorijumu
projekta dodajemo komponentu projekta ADO.NET
Entity Data Model
Database First – kreiranje modela
Kako bi generisali model po Database – First pristupu,
potrebno je odabrati opciju “Generate from Database”
Nakon toga je potrebno podesiti parametre konekcije
na SQL bazu ili odabrati lkaciju .mdf fajla
Database First – kreiranje modela
Poslednji korak je odabir objekata baze koje treba uvesti u model
Moguće je uvesti tabele, poglede i procedure
Takođe, moguće je podesiti da li će model sadržati spoljašnje
ključeve i promeniti naziv modela
Database First – kreiranje modela
Rezultat procedure je EDMX fajl unutar Models foldera
Otvaranjem modela pomoću Model Designer-a može
se videti kako je EF interpretirao tabele
Database First – EDMX
Relacioni model baze u odnosu na EDMX
Kategorije (KategorijaID, Naziv)
Komentari (KomentarID, NazivPosetioca,
TeloKomentara, ProizvodID#)
Proizvodjaci (ProizvodjacID, Naziv)
Tagovi (TagID, Naziv)
Proizvodi(ProizvodID, Naziv, DatumUnosa,
Cena, Opis, ProizvodjacID#, KategorijaID#)
ProizvodTag (ProizvodID#, TagID#)
Database First - EDMX
Za svaku tabelu u bazi postoje odgovarajući entiteti u
modelu
Izuzetak je tabela ProizvodTag, koja predstavlja
agregaciju tabela Proizvod i Tag, a koju je EF
prepoznao kao više – više vezu između entiteta
Slično entitetima, za svaku kolonu u tabeli postoji
odgovarajući atribut odgovarajućeg entiteta u modelu
Odabirom atributa u dijagramu moguće je videti detalje
u vezi sa atributima (tip atributa, da li je atribut ključ,
podrazumevane vrednosti…)
Database First - EDMX
Pored skalarnih atributa, postoje i NavigationProperties
atributi koji se odnose na veze između entiteta
Nazivi odgovaraju nazivima entiteta ili kolekcijama
entieta (zavisi od kardinalnosti veze)
Pomoću njih se pristupa entitetima ili kolekcijama
entiteta na koje konkretan entitet ima referencu
Primer – Entitet Proizvodi ima sledeće atribute
Kategorije
Komentaris
Proizvodjaci
Tagovis
Database First - EDMX
Poredeći relacioni model i EDM može se videti da veze
između entiteta u EDMX-u odgovaraju vezama između
odgovarajućih tabela u bazi
Primer: veza između entiteta Proizvodi i Kategorije
EDMX - Struktura
Otvaranjem EDMX-a pomoću pregledača XML fajlova
možemo videti strukturu EDMX-a u XML formatu
EDMX se, kao što smo ranije naveli sastoji iz
SSDL
CSDL
MSL
EDMX - SSDL
Pregledom SSDL-a može se utvrditi da za svaku tabelu
u bazi postoje adekvatni EntitySet Elementi unutar
EntityContainer elementa
EDMX - SSDL
Slično EntitySet elementima, u okviru EntityContainer
elemenata, postoji i odgovarajući AssociationSet
elementi za svaku vezu između tabele u bazi.
U ovom delu SSDL-a ne postoje detalji kao što su
atributi entiteta niti detalji u vezi sa vezama između
entiteta. Ti detalji se nalaze u EntityType i Association
elementima.
EDMX - SSDL
EntityType bliže objašnjava preslikavanje tabele u
odgovarajući entitet baze podataka.
Name atribut odgovara nazivu tabele u bazi.
Property elementi odgovaraju kolonama u tabeli.
EDMX - SSDL
Association elementi u SSDL-u se odnose na veze između tabela.
Svaka veza preko spoljnog ključa između dve tabele ima svoj
odgovarajući Association element.
Slično kao AssociationSet, svaki Association element ima dva End
elementa.
Pored End elemenata, Associations element ima i
ReferentialConstraint složeni element koji u sebi sadrži Principal i
Dependent elemente.
EDMX - CSDL
CSDL je po strukturi sličan strukturi SSDL-a. EntitySet,
AssociationSet i Association elementi imaju istu strukturu
kao i SSDL
EntityType elementi imaju dodatne elemente u odnosu na
strukturu SSDL-a, u vidu NavigationProperties elemenata
Primer: EntitySet Proizvodi ima NavigationProperties koji se
odnose na entitete Kategorije, Proizvodjaci, kao i na
kolekcije entiteta Tagovis i Komentaris.
Od kardinalnosti veze između entiteta zavisi da li će se
NavigationProperties odnositi na entitet ili kolekciju entiteta.
U CSDL-u ne postoji EntitySet niti EntityType ProizvodTag
jer je to predstavljeno kao više – više veza između entiteta
Proizvod i Tag
EDMX - MSL
U MSL-u, za svaki set entiteta, entiteti šeme baze
podataka preslikavaju u entitet konceptualne šeme.
Ne postoji preslikavanje entiteta ProizvodTagovi iz šeme
baze podataka zato što ne postoji odgovarajući entitet u
konceptualnoj šemi.
EDM – Klase entiteta
Prilikom uvoženja baze podataka primenom Database - First
pristupa, EF automatski generiše i klase entiteta
One se nalaze u Models direktorijumu i fajl u kome se
nalaze vidljiv je prilikom proširenja ikonice EDMX fajla
EDM – Klase entiteta
Generator koda generiše klase entiteta na osnovu
CSDL-a.
Generiše se klasa Context, na osnovu EntityContainer
elementa u CSDL-u, preko koje je moguće pristupiti
svim entitetima
Klase entiteta se generišu za svaki EntitySet element u
CSDL-u.
EDM – Object Context
U ovom slučaju, parcijalna Context klasa se zove
ProdavnicaFONEntities
Generisana je na osnovu EntityContainer elementa u
CSDL-u
Izvedena je iz klase ObjectContext
Ima tri vrste konstruktora:
Bez argumenata – parametri konekcije se učitavaju iz
Web.Config fajla
Connection String argument – parametri konekcije su
sadržani u prosleđenom stringu
EntityConnection argument – parameti konekcije su
sadržani u atributima objekta klase EntityConnection
EDM – Object Context
ProdavnicaFonEntities ima 5 privatnih atributa koji su tipa ObjectSet:
_Komentaris
_Proizvodjacis
_Proizvodis
_Tagovis
_Kategorijes
Odgovaraju EntitySet elementima u CSDL-u i predstavljaju kolekcije objekata
domenskih klasa koja omogućava upis, izmenu i brisanje objekata.
ObjectSet predstavlja osnovu zasve upite koji se pišu u aplikaciji bez obzira da li se
njime učitava jedan ili više objekata
Kako su atributi privatnog tima, to svaki atribut ima svoju GET metodu
EDM – Entiteti
Svaki EntityType atribut elementa EntitySet u CSDL-u ima
svoj odgovarajuću parcijalnu klasu u modelu.
Sve klase nasleđuju klasu EntityObject.
U ovom slučaju postoje klase: Kategorije, Proizvodjaci,
Proizvodi, Tagovi, Komentari.
Svaka od ovih klasa ima Factory metod kojom se kreira
instanca klase.
EDM – Entiteti
Klasa ima i skalarne atribute koji odgovaraju Property
elementima pod odgovarajućim EntityType elementima
u CSDL-u.
Za svaki od ovih skalarnih atributa postoji odgovarajuća
GET i SET metoda kojom se vraćaju i postavljaju
vrednosti atributa.
Pored GET i SET metoda, postoje i metode
On[NazivSkalarnogAtributa]Changing i
On[NazivSkalarnogAtributa]Changed.
Changing metoda se izvršava neposredno pre svake
promene vrednosti skalarnog atributa
Changed metoda se izvršava neposredno nakon svake
promene vrednosti skalarnog atributa.
EDM – Entiteti
EDM – Entiteti
Domenska klasa može sadržati i navigacione atribute,
ukoliko postoji veza sa kolekcijom drugih domenskih klasa.
Za svaku kolekciju sa kojom je u vezi postoji po jedan
navigacioni atribut i za njega su definisane GET i SET
metode
Pomoću ovih navigacionih atributa je moguće pristupiti
kolekciji objekata klasa entiteta sa kojima je posmatrani
entitet u vezi
Navigacioni atribut može biti jedan objekat entiteta koji je u
relaciji sa trenutnim entitetom ili mogu biti kolekcija objekata
entiteta koji su u relaciji sa trenutnim entiteom.
Koji će od ova dva tipa biti definisani za određeni atribut,
zavisi od kardinalnosti veze između dva entiteta.
EDM – Model First
Model – first pristup kreiranju EDM-a koristi se u
slučajevima kada je potrebno kreirati aplikaciju koja
komunicira sa bazom podataka, koja još uvek nije
kreirana.
Kod ovog pristupa, prvo se u Designer-u kreiraju
entiteti i veze između njih, a zatim se, na osnovu
EDMX-a kreira baza podataka.
Kreiranje entiteta i veza između entieta je veoma
jednostavno i ne zahteva pisanje koda.
Model First
Pretpostavićemo da je Web projekat već kreiran u
Visual Studio-u
Model First
Entity Model kreira se tako što u Models direktorijumu
projekta dodajemo komponentu projekta ADO.NET
Entity Data Model
Model First
U koraku za odabir sadržaja modela treba izabrati
Empty Model opciju
Model First – kreiranje
entiteta
Entiteti se dodaju odabirom opcije Add Entity u
kontekstnom meniju na samom Designer-u.
Model First – definisanje atributa entiteta
Atributi entiteta se dodaju odabirom opcije Add scalar
property... u konteksntom meniju na entitetu.
Model First – kreirani entiteti
Model First – veze između entiteta
Veze između entiteta modela se kreiraju odabirom
opcije Add Association u kontekstnom meniju entiteta
Model First – veze između entiteta
Model First – kompletan model
Kreiranjem ostalih odgovarajućih entiteta i veza
između entiteta dobija se EDM sličan onom koji je
dobijen pomoću Database - first metode
Model First – kreiranje baze podataka
Postupak generisanja baze počinje odabirom opcije
Generate Database from Model u kontekstnom meniju
modela
Prvi korak predstavlja definisanje/odabir konekcije na bazu
Model First – kreiranje baze podataka na
osnovu EDM-a
Na sledećem koraku se može videti SQL skripta koja
će biti upotrebljena za kreiranje baze podataka.
Rezultat postupka je SQL skripta koju bi trebalo izvršiti
na SQL serveru.
Operacije nad entitetima – novi entitet
Snimanje novih entiteta se obavlja u nekoiko koraka
Potrebno je kreirati objekat entiteta i dodeliti mu vrednosti
atributa(ne i ključnih), kreirati objekat klase
ProdavnicaFONEntities (objektni kontekst) kako bi imali
pristup metodama EF-a
Sledeći korak je dodavanje kreiranog objekta u
odgovarajuću kolekciju objektnog konteksta
Na kraju, pozivom metode SaveChanges() dodati entitet se
snima u odgovarajuću tabelu u bazi
Operacije nad entitetima – izmena
postojećeg entiteta
Postupak sličan snimanju novog entiteta
Razlika je u tome što entitet koji se snima mora
posedovati vrednost ključnog atributa
Na kraju, pozivom metode SaveChanges() dodati
entitet se snima u odgovarajuću tabelu u bazi
Operacije nad entitetima – brisanje entiteta
Operacija brisanja entiteta se izvršava tako što se nad
kolekcijom entiteta u objektu klase Context (u ovom
slučaj klase ProdavnicaFONEntities) poziva metoda
DeleteObject()
Ova metoda kao argument prihvata objekat entiteta
kolekcije nad kojom se želi izvršiti brisanje.
Operacije nad entitetima – učitavanje
entiteta iz baze
Učitavanje entiteta iz baze se u EF može izvršiti
pomoću LINQ upita nad kolekcijama entieta u okviru
ObjectContext klase
Rezultati izvršavanja LINQ upita je kolekcija objekata
entiteta tipa IQueriable.
Ovaj tip je pogodan iz razloga što je moguće izvršavati
LINQ upite nad njim.
Operacije nad entitetima – učitavanje
entiteta iz baze