primerjava ogrodij entity framework in nhibernate …

73
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Tadej Rola PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE ZA OBJEKTNO-RELACIJSKO PRESLIKAVO Diplomsko delo Maribor, avgust 2017

Upload: others

Post on 31-Oct-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO,

RAČUNALNIŠTVO IN INFORMATIKO

Tadej Rola

PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN

NHIBERNATE ZA OBJEKTNO-RELACIJSKO

PRESLIKAVO

Diplomsko delo

Maribor, avgust 2017

Page 2: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE ZA

OBJEKTNO-RELACIJSKO PRESLIKAVO

Diplomsko delo

Študent: Tadej Rola

Študijski program: visokošolski strokovni študijski program

Informatika in tehnologije komuniciranja

Smer: Razvoj informacijskih sistemov

Mentor: viš. pred. dr. Boštjan Kežmah, univ. dipl. gosp. inž.

Page 3: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

i

Page 4: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

ii

ZAHVALA

Zahvaljujem se mentorju, prof. viš. pred. dr.

Boštjanu Kežmahu za pomoč in vodenje pri

opravljanju diplomskega dela.

Zahvaljujem se tudi najbližjim za podporo pri

študiju.

Page 5: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

iii

Primerjava ogrodij Entity Framework in NHibernate za objektno-relacijsko preslikavo

Ključne besede: objektno-relacijska preslikava, entity framework, nhibernate, ADO.NET

UDK: 004.652.4.045(043.2)

Povzetek

V diplomskem delu primerjamo ogrodji za objektno-relacijsko preslikavo Entity Framework in

NHibernate. Na začetku smo razložili klasičen način dostopa do podatkovne baze preko ADO.NET

komponente, v nadaljevanju še O-RM tehnologijo. Nato je sledila podrobna predstavitev obeh

ogrodij. V drugem delu diplomskega dela najprej razložimo in prikažemo glavne funkcionalnosti

enega in drugega na praktičnem primeru. V zadnjem delu diplomskega dela pišemo o razlikah med

enim in drugim ter njunih prednostih in slabostih/pomanjkljivostih.

Page 6: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

iv

Comparison of Entity Framework and NHibernate frameworks for object-relational mapping

Key words: object-relational mapping, entity framework, nhibernate, ADO.NET

UDK: 004.652.4.045(043.2)

Abstract

In this diploma thesis we are comparing frameworks for object-relational mapping Entity

Framework and NHibernate. At first we discussed about classic data access technology component

ADO.NET. Then a detailed presentation of both frameworks was followed. In the second part of the

thesis, we first explain and show the main functionalities of one and the other in a practical case. In

the final part of the thesis, we write about the differences between one and the other and their

advantages and weaknesses / deficiencies.

Page 7: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

v

KAZALO

1 UVOD................................................................................................... 1

1.1 OPREDELITEV PODROČJA IN PROBL EMA ........................................................................................................ 1

1.2 PREDPOSTAVKE IN OMEJITVE ........................................................................................................................... 1

1.3 PREDSTAVITEV OSNOVNIH METOD DELA ...................................................................................................... 2

2 DOSTOP DO PODATKOV V PROGRAMSKEM JEZIKU .............................. 3

2.1 ADO.NET ................................................................................................................................................................ 3

2.1.1 ARHITEKTURA IN KOMPONENTE ADO.NET................................................................................................. 4

2.1.2 PRIMERJAVA ADO.NET IN ADO ..................................................................................................................... 7

2.2 OBJEKTNO RELACIJSKA PRESLIKAVA ............................................................................................................... 8

2.2.1 SPLOŠNO ........................................................................................................................................................... 9

2.2.2 PREDNOSTI UPORABE O-RM ......................................................................................................................... 9

2.2.3 SLABOSTI UPORABE O-RM ...........................................................................................................................10

2.3 PRIMERJAVA TRADICIONALNE TEHNIKE DOSTOPA IN O-RM...................................................................11

3 ENTITY FRAMEWORK ......................................................................... 13

3.1 OSNOVNE FUNKCIONALNOSTI EF ...................................................................................................................14

3.2 ARHITEKTURA EF................................................................................................................................................14

3.2.1 PONUDNIKI PODATKOV................................................................................................................................15

3.2.2 ENTITETNI ODJEMALEC ................................................................................................................................16

3.2.3 OBJEKTNE STORITVE .....................................................................................................................................17

3.3 RAZVOJ ENTITY FRAMEWORKA ......................................................................................................................17

3.4 PRISTOPI K RAZVOJU.........................................................................................................................................20

3.4.1 CODE FIRST PRISTOP .....................................................................................................................................20

3.4.2 MODEL FIRST PRISTOP ..................................................................................................................................21

3.4.3 DATABASE FIRST PRISTOP ............................................................................................................................21

Page 8: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

vi

4 NHIBERNATE ...................................................................................... 22

4.1 OSNOVNE FUNKCIONALNOSTI NHIBERNATA ..............................................................................................22

4.2 ARHITEKTURA NHIBERNATE ............................................................................................................................23

4.2.1 STANJE OBJEKTOV PERSISTENČNIH RAZREDOV .......................................................................................25

4.3 RAZVOJ NHIBERNATE........................................................................................................................................26

5 UPORABA FUNKCIONALNOSTI NA PRAKTIČNEM PRIMERU ................. 28

5.1 UPORABA ENTITY FRAMEWORK ....................................................................................................................29

5.1.1 PRIPRAVA RAZVOJNEGA OKOLJA................................................................................................................29

5.1.2 IZDELAVA MODELA........................................................................................................................................29

5.1.3 OSNOVNE CRUD OPERACIJE ........................................................................................................................34

5.1.4 SHRANJENE PROCEDURE..............................................................................................................................37

5.1.5 LINQ .................................................................................................................................................................38

5.2 UPORABA NHIBERNATE....................................................................................................................................39

5.2.1 PRIPRAVA RAZVOJNEGA OKOLJA................................................................................................................39

5.2.2 IZDELAVA MODELA........................................................................................................................................40

5.2.3 OSNOVNE CRUD OPERACIJE ........................................................................................................................42

5.2.4 SHRANJENE PROCEDURE..............................................................................................................................45

5.2.5 LINQ .................................................................................................................................................................45

6 PRIMERJAVA EF IN NHIBERNATE ........................................................ 47

6.1 PODPORA RAZLIČNIM SUPB ............................................................................................................................47

6.2 PRESL IKAVA PODATKOVNIH TIPOV ...............................................................................................................47

6.3 PRIMERJAVA FUNKCIONALNOSTI ..................................................................................................................48

6.4 HITROST KL ICEV NA PODATKOVNO BAZO ....................................................................................................51

6.4.1 DODAJANJE PODATKOV ...............................................................................................................................51

6.4.2 BRANJE PODATKOV .......................................................................................................................................52

6.4.3 UREJANJE PODATKOV ...................................................................................................................................52

6.4.4 BRISANJE PODATKOV....................................................................................................................................53

Page 9: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

vii

6.5 PREDNOSTI/SLABOSTI OGRODIJ.....................................................................................................................54

7 SKLEP ................................................................................................. 55

8 LITERATURA ....................................................................................... 56

KAZALO SLIK

SLIKA 2.1: ZGRADBA MODELA ADO.NET [2] .................................................................................. 3

SLIKA 2.2: ARHITEKTURA IS, KI UPORABLJA O-RM ............................................................................ 8

SLIKA 3.1: ARHITEKTURA ENTITY FRAMEWORKA [15] ...................................................................... 14

SLIKA 3.2: MODEL PONUDNIKA PODATKOV [16]............................................................................. 15

SLIKA 3.3: RAZLIKA MED EF5 (LEVO) IN EF6 (DESNO)...................................................................... 19

SLIKA 4.1: "LITE" ARHITEKTURA NHIBERNATE [22] ......................................................................... 23

SLIKA 4.2: "FULL CREAM" ARHITEKTURA NHIBERNATE [22].............................................................. 24

SLIKA 5.1: E-R DIAGRAM MODELA ............................................................................................... 28

SLIKA 5.2: ČAROVNIK ZA DODAJANJE NOVEGA ELEMENTA EDM ......................................................... 31

SLIKA 5.3: EDM MODEL ZA PRIMER TRGOVINE S SKALARNIMI IN NAVIGACIJSKIMI SPREMENLJIVKAMI ......... 32

SLIKA 5.4: IZDELANI RAZREDI Z UPORABO EDM MODELA .................................................................. 32

SLIKA 5.5: IZBIRA OBJEKTOV, KI JIH ŽELIMO V MODELU IZ PB ............................................................. 33

SLIKA 5.6: MODEL GENERIRAN NA OSNOVI OBSTOJEČE PODATKOVNE BAZE ........................................... 34

SLIKA 5.7: ORODJE, KI OMOGOČA RAZVOJ PO PRINCIPU DATABASE-FIRST ............................................. 42

KAZALO PROGRAMSKE KODE

PROGRAMSKA KODA 2.1: PRIDOBITEV PODATKOV V OBLIKI XML IN NAPOLNJENI V DATASET ..................... 5

PROGRAMSKA KODA 2.2: DOSTOP DO PODATKOV Z UPORABO SQL SERVER PONUDNIKA PODATKOV ........... 6

PROGRAMSKA KODA 5.1: DEFINICIJA RAZREDA "RACUN".................................................................. 30

PROGRAMSKA KODA 5.2: CONNECTION STRING, KI KAŽE POT DO PODATKOVNEGA STREŽNIKA .................. 30

PROGRAMSKA KODA 5.3: UKAZ, KI GENERIRA PODATKOVNO BAZO NA PODLAGI MODELA ........................ 30

PROGRAMSKA KODA 5.4: FUNKCIJA, KI VRNE VSE OBJEKTE TIPA "IZDELEK" IZ PB ................................... 35

PROGRAMSKA KODA 5.5: METODA, KI DODA NOVI OBJEKT TIPA "IZDELEK" V PB ................................... 36

Page 10: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

viii

PROGRAMSKA KODA 5.6: METODA, KI POSODOBI OBJEKT TIPA "IZDELEK" V PB NA PODLAGI PARAMETRA... 36

PROGRAMSKA KODA 5.7: METODA, KI IZBRIŠE OBJEKT TIPA "IZDELEK" V PB ......................................... 37

PROGRAMSKA KODA 5.8: IZVRŠEVANJE PROCEDURE Z UPORABO EF .................................................... 37

PROGRAMSKA KODA 5.9: QUERY SINTAKSA (LEVO) IN METHOD SINTAKSA (DESNO) ZA IZPIS VSEH STRANK... 38

PROGRAMSKA KODA 5.10: QUERY SINTAKSA (LEVO) IN METHOD SINTAKSA (DESNO) ZA POGOJNI IZPIS....... 38

PROGRAMSKA KODA 5.11: QUERY SINTAKSA (LEVO) IN METHOD SINTAKSA (DESNO) ZA SORTIRAN IZPIS ..... 39

PROGRAMSKA KODA 5.12: DEFINICIJA RAZREDA "STRANKA" ............................................................. 40

PROGRAMSKA KODA 5.13: KONFIGURACIJA PRESLIKAVE »STRANKA« (LEVO) IN »RACUN« (DESNO) ......... 41

PROGRAMSKA KODA 5.14: METODA ZA GENERIRANJE TABEL IN PRAVIL V PODATKOVNI BAZI .................... 41

PROGRAMSKA KODA 5.15: FUNKCIJA, KI VRNE SEZNAM RAČUNOV ...................................................... 43

PROGRAMSKA KODA 5.16: METODA, KI DODA NOV RAČUN............................................................... 43

PROGRAMSKA KODA 5.17: METODA ZA POSODABLJANJE RAČUNA ...................................................... 44

PROGRAMSKA KODA 5.18: METODA ZA IZBRIS RAČUNA ................................................................... 44

PROGRAMSKA KODA 5.19: KLIC PROCEDURE, KI VRNE SEZNAM RAČUNOV DOLOČENE STRANKE................. 45

PROGRAMSKA KODA 5.20: QUERY SINTAKSA (LEVO) IN METHOD SINTAKSA (DESNO) ZA IZPIS RAČUNOV ..... 46

PROGRAMSKA KODA 5.21: QUERY SINTAKSA (LEVO) IN METHOD SINTAKSA (DESNO) ZA POGOJNI IZPIS....... 46

KAZALO GRAFOV

GRAF 6.1: ČAS V ODVISNOSTI OD KOLIČINE VSTAVLJENIH PODATKOV ZA POSAMEZNO OGRODJE ................ 51

GRAF 6.2: ČAS V ODVISNOSTI OD KOLIČINE BRANIH PODATKOV .......................................................... 52

GRAF 6.3: ČAS V ODVISNOSTI OD KOLIČINE UREJANIH PODATKOV ....................................................... 52

GRAF 6.4: ČAS V ODVISNOSTI OD KOLIČINE BRISANIH PODATKOV ........................................................ 53

KAZALO TABEL

TABELA 2.1: PRIMERJAVA ADO IN ADO.NET [6] ............................................................................ 7

TABELA 2.2: PRIMERJAVA KLASIČNEGA PRISTOPA IN O-RM .............................................................. 12

TABELA 6.1: PRESLIKAVA .NET PODATKOVNIH TIPOV V MS SQL SERVER Z OBEMA TEHNOLOGIJAMA ........ 47

TABELA 6.2: PRIMERJAVA LASTNOSTI OBEH OGRODIJ ....................................................................... 54

Page 11: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

ix

UPORABLJENE KRATICE

EF - Entity Framework

ADO - ActiveX Data Objects

PB - Podatkovna baza

O-RM - Object-Relational Mapping

MDAC - Microsoft Data Access Components

API - Application Programing Interface

LINQ - Language INtegrated Query

CRUD - Create, Read, Update, Delete operacije

SUPB - Sistem za Upravljanje s Podatkovnimi Bazami

IS - Informacijski sistem

Page 12: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

1

1 UVOD

1.1 OPREDELITEV PODROČJA IN PROBLEMA

V obdobju hitrega razvoja aplikacij je nadvse pomembno, katere tehnologije izberemo.

Odločitev, kako bomo s podatki manipulirali, je pri razvoju med glavnimi vprašanji in prav

zaradi tega je potrebno ta del še posebej dobro načrtovati. Zaradi različnih tehnologij je

potrebno poznati tudi različne povpraševalne jezike, ki pa so v splošnem definirani kot niz

znakov, kar pomeni, da hitreje pride do tipkarskih napak, ki jih lahko odkrijemo šele v času

izvajanja aplikacije. Podatki pa se morajo še vedno ročno preslikati med podatkovno bazo

in objekti. Orodja za objektno-relacijsko preslikavo avtomatizirajo prav ta postopek. To je

programska tehnika za manipulacijo s podatki iz podatkovne baze z uporabo objektno

orientiranih programskih jezikov. Omogočajo tudi izdelavo same podatkovne baze iz v

naprej pripravljenih razredov ter še veliko drugih funkcionalnosti, ki jih želimo tekom dela

raziskati. Za .NET ogrodje je na voljo precej knjižnic, kjer pa vidno izstopata predvsem dve.

To sta Entity Framework in NHibernate. Tako kot pri ostalih tehnologijah je tudi tukaj tako,

da ima vsaka svoje prednosti in slabosti, ki smo jih tekom izdelave dela izpostavili.

1.2 PREDPOSTAVKE IN OMEJITVE

V diplomskem delu smo se osredotočili zgolj na prikaz delovanja aplikacije z uporabo

ogrodij za objektno-relacijsko preslikavo, Entity Framework ali NHibernate. Omejitve so

tudi pomanjkanje knjižnih virov za izbrano področje, zato smo omejeni skoraj izključno na

splet. Zavedamo se, da obstaja še veliko drugih ogrodij za objektno-relacijsko preslikavo. Z

omejitvijo zgolj na ti dve smo dobili natančnejšo sliko, katero izmed teh bi razvijalec naj

izbral v določeni situaciji. Praktične primere smo razvijali/prikazovali v razvojnem okolju

Visual Studio 2015 z uporabo programskega jezika C#.

Page 13: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

2

1.3 PREDSTAVITEV OSNOVNIH METOD DELA

V diplomskem delu smo uporabili deskriptivno oziroma opisno metodo, s katero smo

opisovali teorijo in pojme z uporabo predvsem tuje literature in svojega znanja. Uporabili

smo tudi metodo komparacije, s katero smo primerjali teorijo in dela različnih avtorjev, za

podobno tematiko.

Page 14: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

3

2 DOSTOP DO PODATKOV V PROGRAMSKEM JEZIKU

2.1 ADO.NET

Microsoft je izdal knjižnico za ogrodje .NET z vsebujočim naborom razredov, ki izpostavijo

podatkovni dostop .NET razvijalcu. Omogoča komunikacijo med relacijskimi in ne-

relacijskimi sistemi s skupnim sklopom komponent. ADO.NET je skupek programskih

komponent, ki jih razvijalci lahko uporabljamo za dostop in delo s podatki iz podatkovne

baze. Za uporabo funkcionalnosti, ki jih tehnologija ponuja, ni potrebe po dodatnem

sklicevanju na knjižnico, saj je že v osnovi podprta v ogrodju .NET. [1]

Slika 2.1: Zgradba modela ADO.NET [2]

Čeprav beseda ADO.NET izvira iz predhodnika programskega modela ADO (ActiveX Data

Objects), lahko to orodje štejemo kot povsem nov Microsoftov produkt za dostop do

podatkovne baze. ADO je bil prvotno namenjen COM razvijalcem. Obe tehnologiji sicer

izvirata iz Microsoftovih komponent za podatkovni dostop (MDAC), ki je bil zasnovan, da

razvijalcem omogoča enoten in celovit način razvoja aplikacij z dostopnostjo do celotnega

Page 15: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

4

podatkovnega vira. Poleg že omenjenih tehnologij dostopa do podatkovne baze, MDAC

vključuje tudi naslednje komponente: [3]

• OLE DB (Object Linking and Embedding Database),

• ODBC (Open Database Connectivity),

• RDS (Remote Data Services) - zastarelo,

• MSDASQL (OLEDB ponudnik za ODBC) - zastarelo.

2.1.1 ARHITEKTURA IN KOMPONENTE ADO.NET

Obdelava podatkov je običajno potekala na povezovalnem dvo-nivojskem modelu. Zaradi

širjenja obdelave podatkov na več nivojev se je pojavila več nivojska arhitektura, katere se

v razvijalci poslužujejo. To aplikacijam povečuje predvsem možnost razširljivosti.[4]

Glavni komponenti ogrodja ADO.NET za dostop in delo s podatki sta ponudnik podatkov

(angl. »Data provider«) - potrebna povezava, ter DataSet.

DATA SET

Je bil načrtovan z namenom dostopa do podatkov. Je neodvisen od vira podatkov. To

pomeni, da se lahko uporablja z različnimi viri podatkov, kot tudi z XML podatki ali lokalnimi

podatki v aplikaciji. Vključuje najmanj en objekt DataTable, ki ima vrstice, stolpce, primarne

ključe, tuje ključe, omejitve in informacije o povezavah znotraj tega objekta. Tekom dela s

komponento DataSet ni potrebna povezava, saj zagotavlja tako imenovan brez-povezavni

način dostopa. Za razliko od komponente Data Provider, kjer je za delovanje tekom

uporabe potreben objekt razreda Connection, ki zagotavlja povezavo do vira.

Komponenta DataSet za povezavo do vira podatkov uporablja objekt razreda DataAdapter.

Ta objekt predstavlja most med objektom DataSet in virom podatkov. Uporablja objekt

ukaza (angl. »Command«), ki izvršuje SQL stavke ter polni DataSet s podatki. Prav tako

spremlja spremembe, ki se dogajajo na podatkih ter jih lahko potrdi na osnovni vir. [4]

Page 16: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

5

Programska koda 2.1: Pridobitev podatkov v obliki XML in napolnjeni v DataSet

PONUDNIK PODATKOV

So pod-komponente, ki so bile načrtovane za manipulacije s podatki in predvsem za hiter

in »read-only« dostop do podatkov.

Ponudniki podatkov v sklopu .NET ogrodju so [5]:

• ponudnik podatkov za SQL Server (ponuja dostop do podatkov za Microsoftov SQL

strežnik - znotraj System.Data.SqlClient imenskega prostora),

• ponudnik podatkov za OLE DB (za vir podatkov z uporabo OLE DB - znotraj

System.Data.OleDb imenskega prostora),

• ponudnik podatkov za ODBC (za vir podatkov z uporabo ODBC - znotraj

System.Data.Odbc imenskega prostora),

• ponudnik podatkov za Oracle (za vir podatkov na Oraclovi podatkovni bazi.

Omogoča podpora od verzije 8.1.7 dalje - znotraj System.Data.OracleClient

imenskega prostora),

• EntityClient ponudnik podatkov (ponuja dostop do podatkov za Entity Data Model

(EDM) aplikacije - znotraj System.Data.EntityClient imenskega prostora),

• ponudnik podatkov za SQL Server Compact 4.0 (ponuja dostop do podatkov za

Microsoftov SQL strežnik Compact 4.0 - znotraj System.Data.SqlServerCe

imenskega prostora)

Page 17: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

6

Glavni objekti .NET ogrodja za zagotavljanje podatkov so:

• objekt povezave (angl. »Connection«), ki predstavlja povezljivost do podatkovne

shrambe,

• objekt ukaza (angl. »Command«), ki omogoča proženje shranjenih procedur,

spreminjanje podatkov, vračanje podatkov,…,

• objekt bralca podatkov (angl. »Data Reader«), ki zagotavlja visoko zmogljiv tok

(angl. »stream«) podatkov med virom podatkov in odjemalcem.

Programska koda 2.2: Dostop do podatkov z uporabo SQL Server ponudnika podatkov

Page 18: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

7

2.1.2 PRIMERJAVA ADO.NET IN ADO

ADO ADO.NET

Poslovni model

Večino v uporabi povezavno-

orientirani modeli

Brezpovezavno orientirani

modeli (sporočilno usmerjeni)

Odklopljen

dostop

Zagotavlja »Record Set« Zagotavlja »Data Adapter« in

»Data Set«

XML podpora Omejena Polna podpora

Model povezave

Odjemalec mora biti neprestano

povezan s podatkovnim

strežnikom tekom dela na

podatkih, razen v odklopljenem

dostopu

Odjemalec je prekinjen takoj, ko

so podatki procesirani. »Data

Set« je vedno izklopljen

Prenos podatkov ADO objekti komunicirajo v

dvojiškem načinu

Uporablja se XML

Podpora v času

načrtovanja

Pridobijo se informacije o

podatkih v času izvajanja na

podlagi metapodatkov, ki pa so

po navadi dragi za pridobitev

Uravna znane metapodatke v

času načrtovanja, da zagotovi

boljšo zmogljivost in

konsistentnost v času izvajanja

Tabela 2.1: Primerjava ADO in ADO.NET [6]

Page 19: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

8

2.2 OBJEKTNO RELACIJSKA PRESLIKAVA

V objektnem okolju se vse vrti okoli objektov. Objekti so predmeti, ki nosijo podatke. V

relacijskem svetu pa je dela s tabelami in vrsticami, kar je drugače napram objektom. V

objektnem svetu imamo enosmerne asociacije (npr. če ima stranka kazalnik na naročilo, ne

pomeni nujno, da ima tudi naročilo kazalnik na stranko). V relacijskem okolju so vse

asociacije dvosmerne, kar se naredi s tujimi ključi. Vse asociacije so po naravi dvosmerne,

zato se moramo pri objektno-relacijskih preslikavah ukvarjati s temi prekinitvami. V

objektnem okolju je poznano dedovanje, kjer npr. vozila lahko imajo različne podrazrede,

torej je avto podrazred vozila, čoln je podrazred vozila, športni avto je podrazred avta. Tako

dobimo dedovane relacije. Relacijsko okolje ne pozna pojma dedovanja.

Uporaba zgolj orodja za upravljanje s podatkovno bazo ni zadostno za poizvedbe v

kompleksnejših aplikacijah, saj moramo običajno s podatki kasneje tudi operirati. To

zajema pogojevanje, vejitve, zanke,… In takšnih funkcionalnosti poizvedbeni programski

jezik SQL ne omogoča. Zato se za manipulacijo s podatki zanesemo na programski jezik, v

katerem aplikacijo pišemo. Za dostop podatkov iz podatkovne baze v programskem jeziku

imamo na voljo različne tehnologije. Mi se bomo osredotočili na teoretični in praktični del

tehnologije za objektno-relacijsko preslikavo.

Slika 2.2: Arhitektura IS, ki uporablja O-RM

Page 20: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

9

2.2.1 SPLOŠNO

O-RM je v računalniški vedi programska tehnika za pretvorbo podatkov med

nekompatibilnimi sistemskimi tipi v objektno orientiranih programskih jezikih. Kot rezultat

uporabe takšnih orodij dobimo »virtualno objektno podatkovno bazo«, ki jo lahko

uporabljamo znotraj programskega jezika. [7]

Objektno-relacijska preslikava skrbi za vzpostavitev povezave do podatkovnega vira,

izvrševanje komand, izdelava poizvedb, preslikava rezultatov iz poizvedb v objekte, ki jih

aplikacija potrebuje. Pomembna funkcionalnost O-RM tehnologij je tudi sledenje

spremembam na objektih, ki jih lahko glede na ukaz potrdimo na podatkovno bazo ali jih

zavržemo.

Na voljo je veliko število tako brezplačnih kot tudi komercialnih ter odprtokodnih rešitev za

implementacijo O-RM tehnologije. Vendar ne moramo mimo dejstva, da pri uporabi

vendarle prednjačita dva. In to sta Microsoftov produkt Entity Framework ter odprtokodni

Hibernate. Slednji je sicer v osnovi napisan v programskem jeziku Java, vendar so izdali

verzijo tudi za Microsoftovo platformo .NET, ki pa se imenuje NHibernate. Zaradi

razširjenosti prav teh dveh orodij na trgu ju bomo podrobneje opisali, prikazali delovanje,

primerjali razlike med njima ter seveda izpostavili prednosti in slabosti ene ter druge.

2.2.2 PREDNOSTI UPORABE O-RM

Objektno relacijske preslikave so v velikem odstotku uporabne za avtomatizacijo poizvedb,

kjer je to mogoče. Moč O-RM se pokaže v aplikacijah, kjer je strogo objektna arhitektura

skupaj s podatkovno bazo, ki dobro deluje z objektnim modelom. Če ima razvojna ekipa

veliko izkušenj z objektno orientiranim programiranjem, potem je uporaba O-RM lahko

vidna prednost v času razvoja in načrtovanja.

Page 21: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

10

Obstajajo primeri, kjer so poizvedbe bolj optimalne, če jih spišemo ročno, preko klasičnih

SQL stavkov. V takšnih primerih se umaknemo od O-RM načina. S takšnim pristopom ne

smemo pretiravati, kajti v primeru, da je aplikacija nameščena na več podatkovnih

strežnikih, lahko pride do prevelike odvisnosti kode od podatkovne baze. Temu se želimo

izogniti prav z uporabo O-RM tehnologij. Razvijalec mora tudi upoštevati, da se bo aplikacija

testirala na vseh platformah, na katerih bo zagotavljal podporo le-te. [7]

Prednosti, ki jih je potrebno izpostaviti:

• omogoča implementacijo domenskega modela (model, ki predstavlja podatke in

logiko). O-RM zagotavlja to s preslikavami med logičnim poslovnim modelom in

fizičnim podatkovnim modelom,

• občutno zmanjšanje količine kode za delo s podatki, kar pomeni hitrejši razvoj,

• spremembe na podatkih so vidne takoj, saj O-RM sledijo spremembi objekta,

• velika podpora za poizvedbe (tako Entity Framework kot NHibernate omogočata

uporabo LINQ poizvedb) ,

• možnost konfiguracije, katere podatke želimo naložiti med poizvedbo,

• omogoča delo na istih podatkih več uporabnikom hkrati,

• omogoča upravljanje predpomnilnika, ki zmanjša ponovni čas nalaganja iz

podatkovne baze,

• spremembe na objektih se pišejo v transakcije. Te se nato lahko potrdijo ali

zavržejo,

• O-RM upravlja s ključi.

Kot glavno prednost, zakaj bi se razvijalci odločili za uporabo O-RM tehnologij, moramo

izpostaviti hitrost razvoja aplikacije. Čeprav bi kot razvijalci morali poznati vsaj osnove SQL

poizvedb, pa to znanje z uporabo O-RM praktično več ni potrebno. Tehnologiji, kot sta

NHibernate in Entity Framework, samostojno generirata SQL stavke namesto razvijalca.

Tukaj nastane vprašanje kvalitete SQL stavkov. [8]

2.2.3 SLABOSTI UPORABE O-RM

Na drugi strani obstajajo tudi slabosti teh tehnologij oziroma kjer se O-RM tehnologije ne

obnesejo najbolje in je bolje poseči po klasičnih poizvedbah. Obstajajo tudi članki, ki strogo

odsvetujejo uporabo teh tehnologij. [9]

Page 22: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

11

Našteli bomo nekaj primerov, kjer se ta tehnologija ne izkaže za najboljšo:

• če podatkovni model ne ustreza O-R preslikovanju. To se lahko izkaže tudi, če

uporabljamo npr. vmesnike (angl. »interface«), s katerimi polnimo ali pridobivamo

podatke. V tem primeru je boljše uporabiti direktni podatkovni dostop,

• finančne aplikacije ali drugi sistemi, kjer je integriteta podatkov v porazdeljenih

sistemih pomembna, še posebej, če je dela s kompleksnimi transakcijami, ki

zahtevajo dvo-fazno potrditev,

• visoko zmogljive aplikacije, ki zahtevajo popolnoma optimiziran dostop do

podatkovne baze,

• v primeru, da želimo v aplikaciji zaradi izkušenj uporabljati (oziroma že

uporabljamo) uveljavljeno tehnologijo za dostop do podatkovne zbirke (kot je na

primer čisti ADO.NET), bi bila smiselnost implementacije z uporabo O-RM

tehnologije vprašljiva.

• če je struktura obstoječe podatkovne baze težko prenosljiva v objekte.

Kot glavna razloga, zakaj razvijalci, ki so vajeni tradicionalnega dostopa do podatkovne

baze, ne bi prevzeli nove tehnologije iz nabora O-RM, sta prav gotovo [10]:

• nepoznavanje objektno orientiranega programiranja,

• strah/odpor pred učenjem nove tehnologije.

2.3 PRIMERJAVA TRADICIONALNE TEHNIKE DOSTOPA IN O-RM

Ko primerjamo s tradicionalnimi tehnikami, moramo seveda omeniti klasičen pristop dela

s podatki preko SQL stavkov ali morda preko shranjenih postopkov, ki so na podatkovnem

strežniku (angl. »stored procedure«). Pomanjkljivosti, ki jih lahko naštejemo pri klasičnem

pristopu, so velike napram O-RM tehnologijam.

Page 23: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

12

PREDNOSTI SLABOSTI

KLASIČNI

PRISTOPI

• velika fleksibilnost,

• popolni nadzor nad SQL,

• uporabljena polna zmogljivost

podatkovnega strežnika.

• potrebno je znanje SQL,

• »stored procedure« so

zunaj razvojnega okolja,

• veliko enake kode za

različne poizvedbe (pisanje

imena tabel, stolpcev),

• velika možnost porušitve

aplikacije ob spremembi

imena tabele v PB,

• počasen razvoj.

O-RM

• hiter razvoj,

• logika za delo s podatki je

znotraj razvojnega okolja,

• imunost na spremembe na

podatkovni bazi/modelu

(potrebne so zgolj migracije).

• zmogljivost je (lahko)

slabša,

• majhen, oziroma nikakršen

nadzor nad SQL stavki, ki jih

generira O-RM,

• zaradi velike abstrakcije pri

uporabi O-RM je delovanje

»pod pokrovom«

nevidno/nejasno.

Tabela 2.2: Primerjava klasičnega pristopa in O-RM

Page 24: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

13

3 ENTITY FRAMEWORK

Pisanje in upravljanje kode zgolj preko klasičnega načina dostopa do podatkovne baze (npr.

ADO.NET), je, kot smo lahko videli, precej nečisto in monotono delo. Zato je Microsoft

izdelal lastno O-RM orodje, imenovano Entity Framework, ki avtomatizira aktivnosti

povezane z podatkovno bazo v času razvoja aplikacije. Prva verzija je bila izdana leta 2008.

Microsoftov namen ob izdaji je bil vzpostavitev interakcije med .NET aplikacijami in

relacijskimi podatkovnimi bazami. EF je odprtokodno orodje, ki temelji na ADO.NET. [11]

Entity Framework je O-RM orodje, ki razvijalcu omogoča delo z relacijskimi podatki kot

domensko-specifičnimi razredi. Izloča večino kode, ki jo mora razvijalec pisati za delo s

podatkovnimi bazami. Za pisanje poizvedb na PB z uporabo Entity Frameworka se uporablja

LINQ, ki se pretvori v klasično SQL poizvedbo. Ta nato vrne strogo tipizirane objekte , s

katerimi lahko manipuliramo. Tako kot večina ostalih O-RM orodij, tudi Entity Framework

zagotavlja vodenje sprememb na objektu, »lazy loading«, podporo velikemu naboru

podatkovnih strežnikov,… Načelo EF je, da se razvijalec osredotoči na poslovno logiko

aplikacije, ki jo razvija, in da se mu delo s podatkovnim dostopom maksimalno poenostavi.

Cilj vsakega O-RM orodja je povečanje produktivnosti razvijalcev ter zmanjšanje

redundantnosti nalog, zadolženih za delo s podatkovnim dostopom. Omogoča generiranje

in izvrševanje potrebnih komand do podatkovne baze za branje, pisanje ali posodabljanje

podatkov. Poizvedbe lahko pretvorimo v domenske objekte s pomočjo LINQ do entitet

(angl. »LINQ to entities«). EF izvrši zahtevano poizvedbo na podatkovno bazo, rezultate pa

nato pretvori v instance domenskega objekta, ki ga lahko uporabljamo znotraj aplikacije.

[12]

Page 25: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

14

3.1 OSNOVNE FUNKCIONALNOSTI EF

V seznamu so naštete glavne in največkrat uporabljene funkcionalnosti ter lastnosti Entity

Frameworka: [13]

• razvit kot odprtokodno orodje,

• neodvisen od razvoja .NET ogrodja,

• deluje z večino (vsemi) relacijskimi podatkovnimi bazami,

• generiranje SQL stavkov s pomočjo komponente »LINQ to Entities« ,

• omogoča in generira parameterizirane poizvedbe,

• sledi spremembam na objektih v pomnilniku,

• omogoča izdelavo komand za vstavljanje, brisanje in posodabljanje podatkov,

• deluje z vizualnim modelom ali z lastnimi razredi,

• podpora za shranjene postopke (angl. »stored procedures«).

3.2 ARHITEKTURA EF

Arhitektura orodja Entity Framework (Slika 3.1) je v grobem razdeljena na tri glavne

komponente: [14]

• ponudnik podatkov (angl. »data provider«), ki skrbi za generiranje SQL stavkov,

• entitetni odjemalec (angl. »entity client«), ki omogoča uporabo entitet, ki

predstavljajo konceptualni model,

• objektne storitve (angl. »object service«), ki predstavljajo sejo med aplikacijo in

virom podatkov.

Slika 3.1: Arhitektura Entity Frameworka [15]

Page 26: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

15

3.2.1 PONUDNIKI PODATKOV

Njihova naloga je prevajanja programskih poizvedovalnih jezikov (kot je npr. LINQ) v čisto

SQL sintakso. To izvajajo z uporabo komandnega drevesa. Prevedene SQL stavke pa nato

prožijo na izbrano podatkovno bazo.

Entity Framework je neodvisen od podatkovne baze saj zagotavlja dostop do podatkov

preko ADO.NET, na katerem temelji in kateri omogoča, da se poveže z različnimi

podatkovnimi viri. Ponudniki podatkov zagotavljajo naslednje funkcionalnosti:

• preslikava Entity Data Modela (EDM) tipe v tipe, ki jih nosi ponudnik podatkov,

• izpostavlja funkcije, ki so specifične za ponudnika,

• ustvari ukaze, specifične za ponudnika, iz podane Entity Framework poizvedbe,

• omogoča posodabljanje sprememb na objektih skozi EF,

• omogoča definirano shemo podatkovne baze generirati v modele,

• izpostavlja metapodatke (npr. tabele, pogledi) skozi konceptualni model.

Slika 3.2: Model ponudnika podatkov [16]

Page 27: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

16

3.2.2 ENTITETNI ODJEMALEC

Entitetni odjemalec (angl. »entity client«) je prva plast nad ponudniki podatkov ADO.NET.

Poleg klasičnih funckionalnosti ponudnikov podatkov ta plast dodatno ponuja razvijalcem,

da lahko delajo z entitetami v obliki vrstic in stolpcev z uporabo SQL poizvedb brez potrebe

po ustvarjanju razredov, ki predstavljajo konceptualno shemo. Izpostavlja entitetno plast

višjim plastem. Enitetni odjemalec prikazuje EF plasti, ki so glavna funkcionalnost. Te plasti

so poimenovane Enitetetni Podatkovni Model (angl. »Entity Data Model«). Zraven naštetih

plasti, ki so del EDM, sta del nivoja entitetnega odjemalca tudi storitve metapodatkov in

sistem za preslikavo. [13]

SHRANJEVALNA PLAST (angl. »storage layer«):

Vsebuje celotno shemo podatkovne baze v XML formatu.

ETITETNA PLAST (angl. »entity layer«):

Definira entitete in relacije med entitetami. Prav tako v XML formatu.

PRESLIKOVALNA PLAST (angl. »mapping layer«):

Je XML datoteka, ki preslikuje entitete in povezave definirane v entitetni plasti z dejanskimi

povezavami in tabelami definiranimi v logični plasti.

STORITVE METAPODATKOV (angl. »metadata services):

Zagotavlja centraliziran API za dostop metapodatkov shranjenih v entitetni, preslikovalni in

shranjevalni plasti.

SISTEM ZA PRESLIKAVO (angl. »mapping engine«):

Izvaja preslikavo med spremembami na entitetnem objektu in operacijami na pripadajoči

tabeli v podatkovni bazi.

Page 28: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

17

3.2.3 OBJEKTNE STORITVE

Objektne storitve (angl. »object service« plast je objektni kontekst (angl. »object context«),

ki predstavlja sejo interakcije med aplikacijo in virom podatkov. Glavna funkcionalnost

objektnega konteksta je izvajanje operacij (npr. dodajanje, brisanje) nad instancami entitet

in shranjevanje spremenjenih stanj nazaj na podatkovno bazo s pomočjo poizvedb.

Ta storitev omogoča razvijalcu uporabo širokega nabora funkcionalnosti, ki jih EF ponuja

(preslikava primarnega ključa, sledenje spremembam) s pisanjem poizvedb z uporabo LINQ

ali Entity SQL.

3.3 RAZVOJ ENTITY FRAMEWORKA

EF 3.5

Prva verzija Entity Frameworka je izšla leta 2008 in je bil vključen znotraj .NET 3.5 SP1

ogrodja in Visual Studia 2008. Ta izdaja je ponujala zgolj osnovne funkcionalnost O-RM

orodja z uporabo »database first« načinom razvoja. [17]

EF 4

Izdaja Entity Framework 4 je bila vključena v .NET 4 ogrodje in Visual Studio 2010. Nove

funkcionalnosti, ki jih EF omogoča, so bile podpora POCO razredom, »leno nalaganje« (angl.

»lazy loading«), izboljšana testabilnost, generiranje prilagojene kode in »model first« način

razvoja. Čeprav je bila to druga izdaja Entity Frameworka, so jo poimenovali EF4, da

sovpada z razvojem .NET ogrodja. [17]

EF 4.1

Po izdani tej verziji je EF postal samostojno orodje, ki ni bilo vezano na verzije .NET ogrodja.

Dostopen je bil preko NuGet orodja vključenega v Visual Studio, ki omogoča upravljanje s

Page 29: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

18

paketi v projektu. Ta verzija vključuje »code first« način razvoja in poenostavljen API za

DbContext.

V verziji 4.1.1 so bili vključeni popravki skupaj z nekaterimi dodatnimi komponentami, ki

olajšajo delo načrtovanja pri »code first« načinu razvoja. [17]

EF 4.3

Dodana je ena izmed glavnih funkcionalnosti za »code first« način razvoja. V tej verziji je

bila dodana možnost migracij. To pomeni, da lahko avtomatsko spreminjamo model

podatkovne baze glede na model v aplikaciji.

V verziji 4.3.1 so vključeni popravki za verzijo 4.3. Izboljšana je tudi podpora za LocalDb za

razvijalce, ki uporabljajo EF verzije 4.3 v Visual Studio 2012. [17]

EF 5

Ta izdaja se lahko uporablja v Visual Studio 2010 in 2012 za razvoj aplikacij, ki temeljijo na

.NET 4 in 4.5 ogrodju. V .NET 4.5 ogrodju je zagotovljena podpora za enum tipe, tabelno-

vrednotene funkcije, prostorske podatkovne tipe in nekaj zmogljivostnih nadgradenj.

Z uporabo orodja Entity Framework načrtovalca v Visual Studio 2012, se EF5 namesti

samodejno v projekt in generira kodo, ki jo lahko uporabljamo. Prav tako imajo tudi vsi

ASP.NET projekti v Visual Studio 2012 imajo že privzeto nameščen EF5. [17]

EF 6

Verzija EF 6 se lahko uporablja pri razvoju aplikacij, ki temeljijo na .NET 4 in 4.5 ogrodju,

znotraj Visual Studia 2013, 2012 in 2010 (zgolj v času izvajanja). To je prva verzija, kjer je

celoten EF vključen v samostojno knjižnico, ki je dostopna preko upravljalca paketkov

NuGet. [17]

Nove funkcionalnosti, ki delujejo za modele, ustvarjene s »code first« pristopom in modele,

ustvarjene z EF načrtovalcem:

• asinhrone poizvedbe in shranjevanja,

• obnovitev seje, če se povezava prekine,

• možnost konfiguracije znotraj kode (prej preko config datoteke),

Page 30: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

19

• izboljšana testabilnost,

• DbContext objekt je lahko ustvarjen znotraj DbConnectiona, ki je že odprt,

• izboljšana podpora za transakcije znotraj EF in dodana podpora za transakcije

zunaj ogrodja.

EF 6.1

Glavna prednost te verzije je zaznava spremembe modela ter izvajanje migracije. Ob

izboljšavi zmogljivosti EF so bile dodane tudi funkcionalnosti, kot so:

• dodajanje atributa [Index] na lastnost v modelu, ki generira indeks v podatkovni

bazi na izbranem stolpcu,

• omogoča obnovitev transakcije, ko pade povezava.

Trenutno zadnja produkcijska verzija je 6.1.3, v beta testiranju pa je od 19. maja, 2017 [18],

že 6.2.0.

RAZLIKA MED EF5 IN EF6

Glavni preskok v razvoju Entity Frameworka se je zgodil med verzijo 5 in 6. Do vključno

verzije 5 je bil v zunanji knjižnici le del celotnega ogrodja oziroma nekatere funkcionalnosti.

Jedro EF je bilo v .NET ogrodju (Slika 3.3). Jedro pa predstavlja vse poizvedbe, sledenje

spremembam, preslikava vrnjenih podatkov v objekte,…

Slika 3.3: Razlika med EF5 (levo) in EF6 (desno)

Page 31: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

20

Za razliko od EF 5, je pri verziji 6 celotno ogrodje v zunanji knjižnici, dostopno preko NuGeta,

vključno z jedrom. To pomeni, da EF več ni odvisen od razvoja .NET ogrodja za zagotavljanje

specifičnih funkcionalnosti (npr. kot podpora enum).

3.4 PRISTOPI K RAZVOJU

Pri razvoju aplikacije z ogrodjem Entity Framework se ponujajo različni načini, kako

pristopiti k razvoju same aplikacije. Glede na to, kateri način bomo izbrali, je odvisno od

situacije v kateri smo. Glavna dejavnika, na podlagi katerih se odločimo za način razvoja,

sta, ali morda že imamo obstoječo podatkovno bazo, na podlagi katere bi želeli aplikacijo

razvijati, ter ali morda že imamo obstoječe razredi, na katerih bi želeli, da sloni aplikacija.

Entity Framework ponuja tri različne pristope za razvoj. [19]

3.4.1 CODE FIRST PRISTOP

EF je code first pristop k razvoju izdal z verzijo 4.1. Z uporabo tega pristopa se lahko

razvijalec osredotoči predvsem na domensko načrtovanje in začne z izdelavo razredov, ki

jih zahteva, namesto, da na podlagi podatkovne baze izdela razrede, ki se ujemajo s

strukturo podatkovne baze. Code first API nato iz izdelanih entitetnih razredov generira

podatkovno bazo.

Razvijalec začne z razvojem razredov (v jeziku C# ali VB.NET) in kontekstnega razreda. Ko

aplikacijo zaženemo, bo API znotraj EF, ki je pooblaščen za code first pristop, izdelal novo

podatkovno bazo, v primeru, da še ne obstaja. Izvedla se bo preslikava razredov v tabele z

uporabo privzete code first konvencije. Razvijalec ima nato možnost konfiguracije

domenskih razredov za spremembo privzete konvencije za preslikavo tabel v PB z uporabo

DataAnnotation atributa ali »fluent APIja« [19]

Page 32: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

21

3.4.2 MODEL FIRST PRISTOP

Uporablja se, ko nimamo obstoječe podatkovne baze, ki bi predstavljala model. Pri tem

pristopu moramo najprej z uporabo Visual Studia oblikovati EDM model. Določimo entitete

in lastnosti, relacije med entitetami, omejitve. Tako dobimo hierarhijo dedovanja v

oblikovalcu EDM modela. Določimo tudi, katere lastnosti bodo predstavljale primarne

ključe, ter če podatkovna baza avtomatsko številči te zapise. Za izdelan model lahko nato

generiramo skripte, katere zaženemo na podatkovnem strežniku in kreirajo tabele glede na

izdelan model. Skripte vsebujejo SQL stavke, ki spadajo v kategorijo za definicijo podatkov

(angl. »Data Defnition Language« oz. DDL). Pomanjkljivost pri uporabi tega pristopa je, da

se ob spremembah na modelu samodejno ne posodablja tudi podatkovna baza. Ob

spremembi modela in ponovnem generiranju skript bo orodje generiralo vse tabele na

novo. S tem seveda izgubimo tudi vse že obstoječe podatke v podatkovni bazi. Zato je v

takšnem primeru priporočljiva uporaba varnostnih kopij podatkov ali uporaba zunanjih

orodij, ki olajšajo posodabljanje podatkovne sheme. [19]

3.4.3 DATABASE FIRST PRISTOP

Pristop, kjer iz obstoječe podatkovne baze generiramo model, obstaja že od samega

začetka razvoja Entity Frameworka. Razvoj EF je bil zgrajen prav okrog database first

pristopa. Ta omogoča, da obstoječo podatkovno shemo uvozimo v orodje za izgradnjo EDM

modela. Tak postopek imenujemo obratno inženirstvo (angl. »reverse engineering«). Je

najpreprostejša oblika pristopa. Postopek je tak, da preko čarovnika uvozimo obstoječo

podatkovno bazo, kjer označimo katere tabele, poglede in procedure želimo, da orodje za

izdelavo modela preslikava v dejanski EDM model.[19]

Page 33: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

22

4 NHIBERNATE

NHibernate je izpopolnjeno orodje za objektno-relacijsko preslikavo, namenjeno za .NET

okolje. Poleg zagotavljanja preslikave iz .NET razredov v tabele v podatkovni bazi (in .NET

podatkovne tipe v SQL podatkovne tipe), NHibernate omogoča tudi poizvedovanje po

podatkih in druge funkcionalnosti, kar lahko znatno zmanjša čas , potreben za razvoj

aplikacije, za razliko od klasičnega ročnega upravljanja s podatki z uporabo SQL in ADO.NET.

Je aktivno v razvoju, polno funkcionalno in uporabljeno na tisočerih aplikacijskih projektih.

Zgrajen je na vrhu ADO.NET. Trenutno najbolj uporabljena verzija je 4.0.4, v produkciji pa

je tudi že 4.1.1. Zasnovan je na osnovi javanskega produkta Hibernate. [20]

Cilj ogrodja NHibernate je, da razvijalca razbremeni za 95% kode, ki je potrebna za

upravljanje podatkovnega sloja znotraj aplikacije. NHibernate ni namenjen za podatkovno

orientirane aplikacije, kjer je pogosta uporaba procedur za implementacijo poslovne logike

znotraj podatkovne baze. Najbolj je uporabno za objektno orientirane domenske modele

in poslovno logiko znotraj .NET ogrodja v srednjem nivoju. Kljub temu NHibernate pomaga

pri izbrisu ali zamenjavi kode, ki vsebuje specifične SQL stavke, kot tudi prenos rezultatov

in tabelarnega prikaza v grafični prikaz objektov. [21]

4.1 OSNOVNE FUNKCIONALNOSTI NHIBERNATA

V seznamu so naštete, poleg osnovnih O-RM funkcionalnost, glavne in največkrat

uporabljene funkcionalnosti ter lastnosti NHibernata:

• podpora številnim podatkovnim bazam,

• fleksibilne strategije za preslikave,

• razvojno okolje za neprekinjeno integracijo,

• fleksibilni poizvedovalni API-ji,

• podpora za zapis dnevnikov,

• podpora za procedure in prožilce (angl. »triggers«),

• zmožnost seje brez stanja,

• direktna manipulacija s podatki,

Page 34: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

23

• več možnosti medpomnjenja,

• serijske SQL poizvedbe (angl. »batch SQL«),

• podpora za sestavljene ključe,

• lastni podatkovni tipi,

• dvosmerne asociacije,…

4.2 ARHITEKTURA NHIBERNATE

NHibernate je zelo fleksibilen in podpira različne načine uporabe. Prvi izstopajoči je s tako

imenovano »lite« arhitekturo (Slika 4.1), ki sam zagotavlja ADO.NET povezavo in sam

upravlja s transakcijami. Ta pristop uporablja minimalen nabor API-jev, ki jih NHibernate

ponuja. [22]

Slika 4.1: "Lite" arhitektura NHibernate [22]

Tako imenovana polna arhitektura (Slika 4.2) (angl. »full cream architecture«), se umakne

od ADO.NET API-jev in prepusti NHibernatu, da prevzame odgovornost za podrobnosti.

Page 35: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

24

Slika 4.2: "Full cream" arhitektura NHibernate [22]

Razlaga objektov iz polne arhitekture NHibernate:

TOVARNA SEJ (angl. »session factory«)

Varen (nespremenljiv) predpomnilnik iz prevedenih preslikav za eno podatkovno bazo.

Tovarna za objekt seje (ISession) in odjemalec objekta ponudnika povezave

(IConnectionProvider). Lahko uporablja tudi opcijski (drugo-nivojski) predpomnilnik

podatkov, ki jih lahko ponovno uporabimo med transakcijami na nivoju procesa ali grozda.

SEJA (angl. »session«)

Enojni, kratkotrajni objekt, ki predstavlja komunikacijo med aplikacijo in trajno shrambo.

Ovije ADO.NET povezavo. Je tovarna za transakcije (ITransaction). Ima obvezen (prvo-

nivojski) predpomnilnik iz obstoječih objektov, ki se uporabljajo za navigacijo nad objektom

in poizvedbe po objektih glede na identifikacijski ključ.

Page 36: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

25

PERSISTENČNI/STALNI OBJEKTI IN ZBIRKE (angl. »persistent objects and collections«)

Enojni, kratkotrajni objekti, ki vsebujejo trajno stanje in poslovno funkcijo. To so lahko

običajno POCO razredi. Edina posebna stvar o njih je, da so trenutno povezani z (natančno

eno) sejo (ISession). Takoj, ko se seja zapre, bodo ločeni in prosto uporabni v vseh plasteh

aplikacije (npr. direktno, kot prenos objektov v predstavitev in iz nje).

PREHODNI OBJEKTI IN ZBIRKE (angl. »transient objects and collections«)

So instance prehodnih razredov, ki trenutno niso povezani s sejo (ISession). Lahko so

instancirani s strani aplikacije in (še) niso stalni (persistenčni), lahko pa so bili instancirani s

strani seje (ISession), ki se je že zaprla.

TRANSAKCIJA (angl. »transaction«)

Neobvezen, enojni in kratkotrajni objekt, ki ga aplikacija uporablja za definicijo atomskih

enot dela. Seja lahko ima v določenih primerih več transakcij.

PONUDNIK POVEZAVE (angl. »connection provider)

Neobvezen, tovarna za ADO.NET povezave in komande. Ni izpostavljen aplikaciji, ampak ga

lahko razvijalec podaljša/implementira.

TOVARNA TRANSAKCIJ (angl. »transcaction factory«)

Neobvezen, tovarna za instance objekta transakcije (ITransaction). Ni izpostavljena

aplikaciji, ampak jo lahko razvijalec podaljša/implementira. [21]

4.2.1 STANJE OBJEKTOV PERSISTENČNIH RAZREDOV

Objekt trajnega razreda je lahko v eni od treh različnih stanj, ki so opredeljeni glede na

persistentni kontekst (objekt seje - ISession): [21]

Page 37: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

26

• PREHODNO (angl. »transient«) - instanca ni in nikoli ni bila povezana s katerimkoli

persistentnim kontekstom. Nima persistentne identitete (primarne vrednosti

ključa),

• PERSISTENTNO (angl. »persistent«) - instanca je trenutno povezana s

persistentnim kontekstom. Ima persistentno identiteto in najbrž tudi pripadajočo

vrstico v tabeli. Za določen persistentni kontekst, NHibernate zagotavlja, da je

persistentna identiteta enaka CLR identiteti (v pomnilniški lokaciji objekta),

• LOČENO (angl. »detached«) - instanca je bila včasih povezana z persistentnim

kontekstom, a je ta bil zaprt, ali pa je bila instanca serializirana drugemu procesu.

Ima persistentno identiteto in najbrž pripadajoči vrstico v tabeli. Za ločene

instance NHibernate ne zagotavlja povezave med persistentno identiteto in CLR

identiteto.

4.3 RAZVOJ NHIBERNATE

NHibernate je razvil Tom Barrett, kasneje pa sta projekt prevzela Mike Doerfler in Peter

Smulovics. Konec leta 2005 je takratno podjetje JBoss (trenutno Red Hat) najelo Sergeya

Koshcheyeva, kasnejšega vodja razvoja NHibernata, za polni delovni čas na razvoju tega

produkta. Leta 2006 je podjetje JBoss prenehalo s podporo projektu. Trenutno je vodenje

in razvoj prepuščeno skupnosti. [20]

NHIBERNATE 1.0

Prva verzija NHibernata je ponujala celoten nabor funkcionalnosti, ki jih je vseboval javanski

različica Hibernate 2.1. Prav tako je bilo vključenih nekaj funkcionalnosti iz takratne zadnje

Hibernate verzije 3.

Verzija 1.2.1, ki je izšla novembra, leta 2007, je predstavila veliko dodatnih funkcionalnosti

povzetih iz Hibernate 3 in podporo za .NET ogrodje verzije 2.0. Dodana je bila podpora za

procedure, generike in null tipe.

Page 38: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

27

NHIBERNATE 2.0

Verzija 2 je izšla avgusta leta 2008. Je popolnoma enakovredna s takratno Hibernate verzijo

3.2 (v smislu nudenja funkcionalnosti). Z izdajo te verzije je NHibernate opustil podporo za

.NET 1.1.

Verzija 2.1 je bila izdana julija 2009.

NHIBERNATE 3.0

Tretja verzija orodja je izšla decembra 2010, s čimer je bila tudi prva verzija, ki je uporabljala

.NET ogrodje verzije 3.5. V omenjeno verzijo spadajo funkcionalnosti kot so:

• integrirana podpora za LINQ,

• močno tipiziran API imenovan QueryOver,

• podpora za leno nalaganje (angl. »lazy loading«) kolon.

NHIBERNATE 3.2

Izdan aprila 2011, z dodanimi več funkcionalnostmi, med katerimi izstopata:

• preslikava s kodo: tekoča konfiguracija, .hbm.xml datoteke več niso potrebne,

• podskupina: možnost prikaza SQL pogledov kot entitete.

NHIBERNATE 4.0

Četrta, aktualna verzija NHibernate, je bila izdana avgusta leta 2014, v kateri se je še bolj

uveljavila tako imenovana tekoča konfiguracija (»Fluent configuration«). Verzija je bila

poimenovana tudi Fluent NHibernate, ki bistveno prestavi konfiguracijo preslikave iz

zunanjih datotek v programski jezik C#.

Dodana je tudi podpora za .NET ogrodje verzije 4 in SQL Server 2012. Izboljšane so bile že

obstoječe funkcionalnosti za:

• zaganjanje serijskih SQL-ov (angl. »batch SQL«) za MySql podatkovno bazo,

• podpora za uvažanje razredov v preslikave,

• hitrost LINQ poizvedb zmanjšana za do 50% časa,

• podpora PostgreSQL trigonometričnim funkcijam.

Page 39: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

28

5 UPORABA FUNKCIONALNOSTI NA PRAKTIČNEM PRIMERU

Za prikaz funkcionalnosti, ki jih bomo želeli prikazati, smo si izbrali preprost osnovni model,

ki ga najdemo v trgovinah. Izdelali bomo model na osnovi fiktivne trgovine, ki sestoji iz

glavnih entitet:

• Stranka,

• Račun,

• Postavka,

• Izdelek

E-R DIAGRAM MODELA:

Slika 5.1: E-R diagram modela

Entiteta »Stranka« ima lastnosti ime, priimek, naslov in pošta številka. Predpostavili bomo,

da so stranke zgolj fizične osebe, od katerih se ne zahteva davčna številka in druge

podrobnosti. »Racun« nosi tuji ključ entitete »Stranka« ter datum, kdaj je bil račun izdan.

Entiteta »Postavka« ima podatek za vsako postavko na računu, zato ima tuji ključ računa.

»Postavka« ima tudi tuji ključ izdelka, ki ga je stranka izbrala, količino izbranega izdelka ter

Page 40: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

29

skupni znesek postavke. »Izdelek« ima naziv izdelka, ceno izdelka in povezavo na entiteto

»TipIzdelka« z njegovim tujim ključem. Ta vsebuje zgolj naziv tipa izdelka.

5.1 UPORABA ENTITY FRAMEWORK

5.1.1 PRIPRAVA RAZVOJNEGA OKOLJA

Najprej bomo v programu Visual Studio 2015 izdelali novi projekt namenjen razvoju

primera na osnovi ogrodja Entity Framework. Za testni prikaz funkcionalnosti smo izbrali

konzolno aplikacijo, katero smo poimenovali »PrimerEF«. Nastavili smo, da bo primer razvit

v ogrodju .NET verzije 4.5.2.

Ko je projekt ustvarjen, imamo dve možnosti, kako vpeti ogrodje Entity Framework v na

novo ustvarjeno okolje.

1. Preko orodja NuGet, ki vodi nameščene paketke (angl.«packages«) v projektu.

2. Preko orodja Package Manager Console, kjer vpišemo željen ukaz, orodje pa

namesto nas izvede namestitev paketka, ki ga želimo v projektu.

Po namestitvi EF je okolje za nadaljevanje razvoja pripravljeno. V nadaljevanju bomo

prikazali izdelavo modela z uporabo različnih pristopov, ki jih ponuja Entity Framework.

5.1.2 IZDELAVA MODELA

CODE-FIRST PRISTOP

Kot smo omenili že v zgornjem delu diplomskega dela, je pristop code-first najbolj razširjen

in tudi najbolj uporaben, če se lotimo razvoja aplikacije »iz nič«, torej brez predhodno

obstoječe podatkovne baze in aplikacijske logike. Izdelamo si razrede, katere nato

preslikamo v tabeli na podatkovni bazi.

Page 41: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

30

Programska koda 5.1: Definicija razreda "Racun"

Za tem, ko definiramo vse potrebne razrede (v našem primeru »Racun«, «Stranka«,

«Izdelek«, »TipIzdelka« in »Postavka«), napišemo še kontekstni razred, kamor vključimo

sezname razredov, ki jih želimo v podatkovni bazi. Kontekstni razred omogoča konfiguracijo

dodatnih nastavitev. Da lahko Entity Framework dostopa do podatkovnega strežnika,

potrebuje povezavni niz (angl. »connection string«). Ta mu pokaže pot do strežnika, kjer

želimo, da je podatkovna baza locirana. Connection string (Programska koda 5.2) vnesemo

znotraj datoteke App.config.

Programska koda 5.2: Connection string, ki kaže pot do podatkovnega strežnika

Ko je model pripravljen, lahko zaženemo ukaz (Programska koda 5.2) za izdelavo

podatkovne baze na podlagi modela. Ukaz vzpostavi okolje na podatkovnem strežniku.

Programska koda 5.3: Ukaz, ki generira podatkovno bazo na podlagi modela

MODEL-FIRST PRISTOP

Drugi način, kako lahko izdelamo model, je z uporabo model-first pristopa. To storimo tako,

da preko orodja, ki ga ponuja Visual Studio, v projektu dodamo nov element, poimenovan

ADO.NET Entity Data Model. V čarovniku, ki se nato prikaže(Slika 5.2) izberemo Empty EF

Designer model, kar bo odprlo prazen načrtovalec za EDM model.

Page 42: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

31

Slika 5.2: Čarovnik za dodajanje novega elementa EDM

V načrtovalec smo nato dodali vseh 5 entitet, ki jih želimo v aplikaciji. Vsaki entiteti smo

nato dodali skalarne lastnosti, ki bodo nosile podatke. Določili smo jim podatkovne tipe.

Prav tako smo dodali asociacije med entitetami, čigar rezultat so bile dodane navigacijske

lastnosti v entitete.

Page 43: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

32

Slika 5.3: EDM model za primer trgovine s skalarnimi in navigacijskimi spremenljivkami

Visual Studio EDM načrtovalec omogoča generiranje entitetnih razredov in kontekstnega

razreda iz izdelanega modela. To storimo z dodajanjem novega elementa k modelu.

Imenuje se Code Generation Item. Ta ob pravilni konfiguraciji lastnosti v modelu ustvari

identične razrede (Slika 5.4), kot smo jih sami pri code-first pristopu. Ustvari se tudi

kontekstni razred.

Slika 5.4: Izdelani razredi z uporabo EDM modela

Page 44: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

33

DATABASE-FIRST PRISTOP

Ker ta pristop k razvoju od nas že zahteva obstoječo podatkovno bazo, bomo prikazali

uporabo pristopa s pomočjo že izdelane podatkovne baze iz prvega prikazanega pristopa

(code-first).

To storimo tako, da v projektu dodamo novi element, imenovan ADO.NET Entity Data

Model. Za razliko od model-first pristopa, kjer smo uporabili prazno predlogo, tukaj v

čarovniku izberemo EF designer from database, kar pomeni, da bomo zgradili model na

osnovi obstoječe podatkovne baze.

Za tem se prikaže okno, kjer lahko dodamo podatkovno bazo (.mdf), ali jo izberemo na

podlagi povezave do podatkovnega strežnika. Vnesli smo pot do podatkovne baze iz prvega

primera. Sledi izbira elementov (Slika 5.5), ki jih želimo uvoziti v model. Omogoča uvoz

pogledov, tabel, procedur in funkcij. Izbrali bomo vseh 5 tabel.

Slika 5.5: Izbira objektov, ki jih želimo v modelu iz PB

Page 45: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

34

Po uvozu podatkovne baze se izriše model (Slika 5.6) na podlagi obstoječe podatkovne

baze. Prav tako se generirajo entitetni razredi potrebni za model.

Slika 5.6: Model generiran na osnovi obstoječe podatkovne baze

Visaul Studio EDM načrtovalec v datoteko App.config doda oznako za connection string,

čemur sledi, da je projekt pripravljen na povezovanje s podatkovno bazo.

5.1.3 OSNOVNE CRUD OPERACIJE

Delovanje Entity Frameworka bomo prikazali na osnovnih CRUD metodah, ki vsebujejo:

• Create metodo (izdela vrstico/vrstice),

• Read metodo (prebere vrstico/vrstice),

• Update metodo (posodobi vrstico/vrstice),

• Delete metodo (izbriše vrstico/vrstice).

Page 46: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

35

Vse metode bomo prikazali na primeru, kjer najprej izdelamo kontekstni objekt z uporabo

using izjave. Razlog za uporabo takšnega pristopa je, da kontekstnemu objektu zagotovimo,

da bo odstranjen (angl. »disposed«), takoj ko pride iz definiranega področja uporabe (angl.

»scope«). S tem se rešimo potrebnega pisanja kode za ročno odstranjevanje konteksta.

Pri funkciji, kjer vrnemo seznam vseh izdelkov (Programska koda 5.4), smo uporabili

kontekstni objekt. Kot smo definirali v pripadajočem kontekstnem razredu, imamo nabor

izdelkov poimenovan »seznamIzdelkov«, katerega smo z uporabo LINQ funkcije ToList()

pretvorili v seznam izdelkov. Ker smo lastnost »TKIDTipIzdelka« na razredu »Izdelek«

definirali z rezervirano besedo virtual, se bo objekt naložil v objekt po principu lazy loading.

Ker želimo seznam izdelkov uporabljat po zaprtju odprtega konteksta, moramo nalaganje

objekta spremeniti v t.i. takojšnje nalaganje (angl. »eager loading«). To storimo z uporabo

Include funkcije znotraj imenskega prostora System.Data.Entity, kjer podamo preko

navigacijske poti pot do objekta, katerega želimo imeti v trajnem seznamu izdelkov.

Programska koda 5.4: Funkcija, ki vrne vse objekte tipa "Izdelek" iz PB

Za dodajanje nove vrstice (Programska koda 5.5) v podatkovni bazi moramo najprej ustvari

nov objekt razreda. Zato smo definirali metodo, kjer znotraj uporabe kontekstnega objekta

kreiramo nov objekt razreda ter mu priredimo vrednosti. Nov objekt nato dodamo v

seznam v kontekstu ter potrdimo s shranjevanjem na podatkovno bazo.

Page 47: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

36

Programska koda 5.5: Metoda, ki doda novi objekt tipa "Izdelek" v PB

Metoda za posodabljanje izdelka (Programska koda 5.6) dobi objekt kot parameter v

metodo. Nato z objektom konteksta preko ID izdelka pridobimo pripadajoči izdelek, ki bo

vezan na odprt kontekst. Na novo pridobljenemu objektu lahko spremenimo vrednosti.

Metoda se zaključi s shranjevanjem sprememb na podatkovno bazo.

Programska koda 5.6: Metoda, ki posodobi objekt tipa "Izdelek" v PB na podlagi para metra

Pri metodi za izbris izdelka (Programska koda 5.7) iz podatkovne baze je postopek podoben

kot pri posodabljanju. Najprej moramo izbran izdelek ponovni pridobiti, da ga vežemo na

odprt kontekstni objekt. Nato ga s funkcijo Remove() izbrišemo iz konteksta ter z ukazom

SaveChanges() potrdimo izbris na podatkovni bazi.

Page 48: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

37

Programska koda 5.7: Metoda, ki izbriše objekt tipa "Izdelek" v PB

5.1.4 SHRANJENE PROCEDURE

Ker bi naj O-RM tehnologija nadomeščala klasične nastope dostopa do podatkov, je

potrebno v to všteti tudi zagotavljanje takšnih funkcionalnosti, kot je na primer klic stored

procedure. Entity Framework omogoča klice procedur, ki so shranjene v podatkovni bazi.

Za naš primer smo na SQL strežniku izdelali novo proceduro, poimenovano

»GetIzdelkiGledeNaTip«, ki kot parameter sprejme ključ tipa izdelka. Ta nato vrne rezultate

na podlagi izvršenega SQL stavka znotraj procedure na strežniku. Napisali smo metodo

(Programska koda 5.8), kjer z uporabo objekta kontekstnega razreda pridobimo objekt tipa

izdelka. Nato izdelamo novi SqlParameter, ki ga poimenujemo ter mu določimo vrednost.

Sledi klic SQL stavka, kjer navedemo rezervirano besedo exec, ki sproži proceduro

navedeno v nadaljevanju niza z imenom parametra.

Programska koda 5.8: Izvrševanje procedure z uporabo EF

Page 49: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

38

5.1.5 LINQ

Poizvedbe v podatkovno bazo so z uporabo Entity Frameworka izvedene s tako imenovanim

LINQ to Entities pristopom. Ponuja LINQ podporo, ki omogoča razvijalcem pisanje poizvedb

glede na izdelan konceptualni model preko Entity Frameworka z uporabo enega izmed .NET

programskih jezikov. LINQ to Entities pretvarja LINQ poizvedbe v komandne poizvedbe, ki

se s pomočjo Entity Frameworka izvedejo in vrnejo objekte. Omogoča poizvedovalno

sintakso (angl. »query syntax«) in metodično sintakso (angl. »method syntax«).

POIZVEDBE PO VSEH PODATKIH

Poizvedba po vseh podatkih določenega tipa (Programska koda 5.9) je najpreprostejša

oblika poizvedbe, ki jo lahko napišemo. Sledeči primer izpiše vse stranke v tabeli »Stranka«.

Programska koda 5.9: Query sintaksa (levo) in method sintaksa (desno) za izpis vseh strank

FILTRIRANJE REZULTATOV POIZVEDBE

Funkcija Where() se uporablja (Programska koda 5.10), da pridobimo samo določene

podatke iz podatkovne baze. Pomen je precej podoben rezervirani besedi where v SQL

poizvedbah.

Programska koda 5.10: Query sintaksa (levo) in method sintaksa (desno) za pogojni izpis

Page 50: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

39

SORTIRANJE REZULTATOV POIZVEDBE

Sortiranje se izvede z uporabo metode OrderBy. Z uporabo rezervirane besede descending

se razvrsti padajoče, sicer je po privzeto naraščajoče. Prav tako je mogoče sortirati rezultate

po več kriterijih in sicer z uporabo ThenBy() metode, kjer definiramo nadaljevanje

sortiranja.

Programska koda 5.11: Query sintaksa (levo) in method sintaksa (desno) za sortiran izpis

5.2 UPORABA NHIBERNATE

5.2.1 PRIPRAVA RAZVOJNEGA OKOLJA

Tako kot smo omenili pri teoretičnem opisu ogrodja NHibernate, je z verzijo 4.0 prišla

dodadna funkcionalnost, ki je omogočala konfiguracijo in preslikave z uporabo strogo

tipiziranega jezika C#. Tako se nastavitve obnašanja in preslikav seli iz XML dokumentov v

programski jezik. Ta način bomo uporabili tudi pri prikazu funkcionalnosti na projektu.

V Visual Studio 2015 bomo izdelali novi projekt, za katerega smo izbrali konzolno aplikacijo,

ter ga poimenovali »PrimerNHibernate«. Tako kot EF bomo tudi to ogrodje uporabljali v

ogrodju .NET 4.5.2.

Ko je projekt ustvarjen, imamo dve možnosti, kako vpeti ogrodje NHibernate v na novo

ustvarjeno okolje.

1. Preko orodja NuGet, ki vodi nameščene paketke (angl.«packages«) v projektu.

2. Preko orodja Package Manager Console, kjer vpišemo željen ukaz, orodje pa

namesto nas izvede namestitev paketka, ki ga želimo v projektu.

Ker je Fluent NHibernate le zgornji sloj celotnega ogrodja, bo orodje za namestitve

paketkov samodejno namestilo osnovni NHibernate.

Page 51: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

40

Po namestitvi je okolje za nadaljevanje razvoja pripravljeno. V nadaljevanju bomo prikazali

izdelavo modela z uporabo različnih pristopov, ki jih ponuja NHibernate.

5.2.2 IZDELAVA MODELA

CODE-FIRST

NHibernate privzeto omogoča uporabo tako imenovanega code-first pristopa, ki je že znan

iz EF. Tukaj je razlika takšna, da NHibernate sam ne izdela podatkovne baze, generira pa

tabele v podatkovni bazi ter vse ključe, ki jih zapišemo v preslikovalnih datotekah.

Najprej smo izdelali razrede (Programska koda 5.12) na osnovi entitetno-relacijskega

diagrama, ki smo ga prikazali na Slika 5.1, ki predstavljajo model. Za uporabo modela z

NHibernate se mora vsaka lastnost v razredu označiti z rezervirano besedo virtual, kar

omogoča, da se objekt v pomnilnik naloži po principu »lazy loadinga«.

Programska koda 5.12: Definicija razreda "Stranka"

Bistvena razlika/prednost napram Entity Frameworku je ta, da se razvijalcu popolnoma

prepusti konfiguracija, ki je potrebna za definicijo preslikav med relacijsko podatkovno bazo

in objekti v programskem jeziku. Zato je potrebno za vsak definiran razred spisati tudi

pripadajoči preslikovalni razred (angl. »map class«). Tam določimo katera lastnost v

razredu modela je primarni ključ, kateri stolpec se preslikuje v kateri podatkovni tip,…

Page 52: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

41

Programska koda 5.13: Konfiguracija preslikave »Stranka« (levo) in »Racun« (desno)

Ko imamo vse potrebne razrede za model in pripadajoče preslikovalne razrede, je model za

delo pripravljen. Ker NHibernate ne podpira izdelave podatkovne baze, jo mora razvijalec

v naprej izdelati ročno na podatkovnem strežniku. V connection string se nato zavede ime

podatkovne baze. Izdelati je potrebno metodo (Programska koda 5.14), ki za podatkovno

bazo in model na podlagi podanega connection string-a generira pripadajoče tabele in

omejitve.

Programska koda 5.14: Metoda za generiranje tabel in pravil v podatkovni bazi

DATABASE-FIRST

Visual Studio v osnovi ne podpira podobnega načrtovalca za NHibernate model, kot to

počne za EF. Obstajajo pa ločene rešitve, kjer povežemo izbrano rešitev z podatkovno bazo,

orodje pa samodejno generira razrede za model in razrede za preslikavo. Eno izmed takšnih

Page 53: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

42

orodij je NHibernate Mapping Generator, ki je prosto dostopno na spletu. Prav tako ponuja

možnost sprememb na samih tabelah ter določanje njenih tipov, null vrednosti, ključev,…

Slika 5.7: Orodje, ki omogoča razvoj po principu database-first

5.2.3 OSNOVNE CRUD OPERACIJE

Delovanje NHibernata bomo prikazali na osnovnih CRUD metodah, ki vsebujejo:

• Create metodo (izdela vrstico/vrstice),

• Read metodo (prebere vrstico/vrstice),

• Update metodo (posodobi vrstico/vrstice),

• Delete metodo (izbriše vrstico/vrstice).

Vse metode bomo prikazali na primeru, kjer najprej izdelamo objekt seje z uporabo using

izjave. Razlog za uporabo takšnega pristopa je, da objektu seje zagotovimo, da bo

odstranjen (angl. »disposed«), takoj ko pride ven iz definiranega področja uporabe (angl.

»scope«). S tem se rešimo potrebnega pisanja kode za ročno odstranjevanje konteksta.

Pri funkciji, kjer vrnemo seznam vseh računov (Programska koda 5.15Programska koda 5.4),

smo z uporabo SessionFactory odprli novo sejo. Znotraj seje pa smo funkcijo ovili še v

transakcijo. S tem zagotovimo, da se podatki ne morejo spremeniti v času, ko jih obdeluje

funkcija. Račune smo pridobili z uporabo funkcije CreateCriteria, kjer ji določimo tip (torej

Page 54: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

43

tabelo v podatkovni bazi), po katerem želimo iskati. Razrede smo si zasnovali, da v osnovi

uporabljajo princip lazy loadinga, kar v primeru, ko želimo seznam uporabljati po zaprtju

seje, ne pride v poštev. Zato moramo eksplicitno navesti, da želimo, da se objekt naloži v

pomnilnik takoj, dokler še je seja odprta. Transakcijo potrdimo in vrnemo rezultat.

Programska koda 5.15: Funkcija, ki vrne seznam računov

Za dodajanje novega elementa (Programska koda 5.16) v podatkovni bazi smo znotraj seje

in znotraj transakcije izdelali objekt razreda »Racun«. Nato smo z uporabo Get() funkcije,

ki kot parameter sprejme ID objekta, pridobili stranko, na katero želimo vezati nov račun.

Nov račun smo nato shranili na sejo in potrdili transakcijo. Nov element je nato viden v

podatkovni bazi.

Programska koda 5.16: Metoda, ki doda nov račun

Page 55: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

44

Metoda za posodabljanje računa (Programska koda 5.17) dobi objekt kot parameter v

metodo. Nato znotraj odprte seje in transakcije pridobimo objekt, katerega vežemo na

trenutno odprto sejo. Dobljenemu objektu nato priredimo vrednosti, katere nosi vhodni

parameter. Z Metodo Update() se shrani sprememba na podatkovno bazo.

Programska koda 5.17: Metoda za posodabljanje računa

Pri delete metodi (Programska koda 5.18) gre za podoben način kot pri posodobitvi. Najprej

moramo objekt, ki ga dobimo kot parameter vezati na trenutno odprt objekt. Zato moramo

s poizvedbo pridobiti objekt iz podatkovne baze. Objekt nato z metodo Delete() izbrišemo

iz podatkovne baze. Metoda se zaključi s potrjevanjem transakcije.

Programska koda 5.18: Metoda za izbris računa

Page 56: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

45

5.2.4 SHRANJENE PROCEDURE

Tako kot večina sodobnih O-RM tehnologij, tudi NHibernate nudi podporo za izvajanje

shranjenih procedur, ki se nahajajo v podatkovni bazi. Izvede se z uporabo funkcije

CreateSQLQuery, kateri kot parameter podamo ime procedure (Programska koda 5.19).

Dodati moramo tudi parameter, ki se pošlje skupaj s klicem. Na koncu poizvedbe je treba

dopisati, v kateri tip objekta se rezultat transformira.

Programska koda 5.19: Klic procedure, ki vrne seznam računov določene stranke

Kot vidimo na zgornjem primeru, je v podatkovni bazi procedura, ki kot parameter sprejme

tuji ključ stranke. Nato se s SQL stavkom v proceduri izvede poizvedba, ki vrne seznam

računov določene stranke.

5.2.5 LINQ

Bistvena funkcionalnost, ki jo NHibernate nudi, je podpora za poizvedbe na podlagi LINQ

sintakse. Uporablja se preko razširitvene metode na objektu seje z besedo Query<T>, kjer

je T model (tabela), po kateri želimo uporabljati poizvedbo. Poznamo dve sintaksi uporabe

LINQ (podobno kot pri EF) in sicer:

• sintaksa za verižne poizvedbe - metodična (NHibernate poimenuje »query

chaining syntax«),

• sintaksa za razumljivejšo poizvedbo - poizvedovalna (NHibernate poimenuje

»query comprehension syntax«).

Page 57: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

46

POIZVEDBE PO VSEH PODATKIH

Poizvedba po vseh podatkih določenega tipa (Programska koda 5.20) je najpreprostejša

oblika poizvedbe, ki jo lahko napišemo. Sledeči primer izpiše vse stranke v tabeli »Stranka«.

Programska koda 5.20: Query sintaksa (levo) in method sintaksa (desno) za izpis računov

FILTRIRANJE REZULTATOV POIZVEDBE

Funkcija Where() se uporablja (Programska koda 5.21), da pridobimo samo določene

podatke iz podatkovne baze. Pomen je precej podoben rezervirani besedi where v SQL

poizvedbah.

Programska koda 5.21: Query sintaksa (levo) in method sintaksa (desno) za pogojni izpis

Page 58: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

47

6 PRIMERJAVA EF IN NHIBERNATE

6.1 PODPORA RAZLIČNIM SUPB

Obe ogrodji se ponašata z zelo širokim naborom podpore sistemom za upravljanje s

podatkovnimi bazami. Razvijalci obeh ogrodij zagotavljajo, da sta sistema popolnoma

podprta za vse znane relacijske podatkovne baze. Za razliko od NHibernate, EF z najnovejšo

verzijo, namenjeno ASP.NET Core sistemom (imenovan Entity Framework Core), zagotavlja

podporo tudi ne-relacijskim podatkovnim bazam (NoSql podatkovne baze). [23]

6.2 PRESLIKAVA PODATKOVNIH TIPOV

Prikazali bomo, kako različno/podobno preslikata podatkovne tipe Entity Framework in

NHibernate na podatkovni strežnik Microsoft SQL Server.

.NET C# EF v MSSQL NHIBERNATE v MSSQL

Byte tinyint tinyint

Int32 int int

Int16 smallint smallint

Int64 bigint bigint

Single real real

Double float float

Char Ne podpira Nchar(1)

Boolean bit bit

String nvarchar(MAX) Nvarchar(255)

Decimal decimal(18,2) Decimal(19,5)

Byte[] varbinary(MAX) varbinary(MAX)

DateTime datetime datetime

DateTimeOffset datetimeoffset(7) datetimeoffset(7)

TimeSpan time(7) bigint

Tabela 6.1: Preslikava .NET podatkovnih tipov v MS SQL Server z obema tehnologijama

Page 59: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

48

6.3 PRIMERJAVA FUNKCIONALNOSTI

Primerjamo dve najbolj znani in uporabljeni O-RM ogrodji v .NET okolju, zato bistvenih

razlik, kar se tiče funkcionalnosti praktično ni. Kljub temu, pa obstajajo nekateri aspekti,

kjer sta si precej različna. To poglavje bo namenjeno primerjavi posameznih funkcionalnosti

med njima.

PRESLIKAVE (angl. »mappings«)

Oba nudita podporo za uporabo POCO razredov, ki predstavljajo entitete. NHibernate

omogoča tri vrste preslikave:

• XML osnovano, katere prednost je, da entitetnega razreda ne vežemo na določeno

O-RM ogrodje, prav tako so te datoteke lahko nameščene kot datoteke na

datotečnem sistemu,

• atributno osnovano kjer držimo tako entitete kot podrobnosti podatkovne baze na

enakem mestu. Slabost je nasičenje entitetnih razredov z NHibernate specifičnimi

atributi,

• strogo tipizirano na osnovi kode, kar omogoča dinamično kreacijo modela, kar

odraža samodejne spremembe na preslikovalnih datotekah ob spremembi

modela.

Na drugi strani Entity Framework omogoča dve: [24]

• atributno osnovano (kljub temu atributi ne morejo izraziti vseh možnosti

nastavitev podatkovne baze, npr. omejitve (angl. »cascading«)),

• strogo tipizirano na osnovi kode.

POVEZAVE (angl. »associations«)

Kar se tiče povezav, imata tako EF kot NHibernate podporo za povezave ena proti mnogo,

ena proti ena in mnogo proti mnogo. Kljub temu NHibernate ponuja precej več zbirk: [25]

• vreča entitet ali vrednosti (ne sortirano, možnost duplikatov),

• seznam entitet ali vrednosti (sortirano, indeksirano s številčnim stolpcem),

• zemljevidi entitet ali vrednosti (indeksirano z entiteto ali katerokoli vrednostjo),

• nabori entitet ali vrednosti (ne sortirano, brez duplikatov),

• polja entitet ali vrednosti (indeksirano, nespremenljivo).

Page 60: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

49

POIZVEDBE (angl. »querying«)

NHibernate omogoča precej večje številko poizvedovalnih API-jev: [26]

• LINQ - največkrat uporabljen,

• Hibernate poizvedovalni jezik (HQL) - objektno orientiran, podoben SQL-u, na voljo

od začetka razvoja NHibernata. Najbolj napreden ponudnik poizvedb, ustreza

dinamičnim poizvedbam (tudi z uporabo sestavljenih nizov),

• kriterijski API (angl. »Criteria API«) je konceptualna predstavitev poizvedbe, ki se

izvede s pomočjo modela razreda. Dobro deluje tudi za dinamične poizvedbe.

• Query Over je podoben kriterijskemu API-ju, s to razliko, da ta uporablja strogo

tipizirane LINQ izraze, namesto nizov,

• SQL (vključno s procedurami),

• možnost integracije z zunanjimi orodji za pisanje poizvedb.

Na drugi strani EF ponuja precej bolj skop napor API-jev za poizvedbe: [26]

• LINQ to Entities s polno podporo, večina razvijalcev uporablja tak način pisanja

poizvedb,

• Entity SQL, podobno kot HQL, omogoča objektno-orientirane poizvedbe,

neodvisne od podatkovne baze dinamične izraze,

• SQL (vključno s procedurami).

PREDPOMNJENJE (angl. »caching«)

Oba ponujata prvo-nivojsko pred pomnjenje. NHibernate ponuja tudi drugo-nivojsko, ki se

lahko uporablja z več objekti ISessionFactory, kot tudi različnimi sistemi za pred pomnjenje,

npr.: [25]

• Hashtable (v pomnilniku),

• SysCache (uporablja ASP.NET ponudnik predpomnilnika),

• Prevalence,…

GENERIRANJE ID-JEV (angl. »ID Generators«)

Entity Framework ponuja zgolj tri možnosti:

• GUID,

• dodeljene vrednosti,

• identiteta.

Page 61: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

50

Na drugi strani NHibernate ponuja širok spekter strategij s strani podatkovne baze in drugo:

• identiteta (za podatkovne baze, ki podpirajo identitetne stolpce),

• sekvence (za podatkovne baze, ki podpirajo sekvence),

• na osnovi prožilca,

• več GUID pristopov (tudi v obliki niza),

• tabela ID-jev,

• združeno (angl. »pooled«),…

LASTNOSTI (angl. »properties«)

NHibernate podpira lastnosti entitetnih tipov (ena proti ena ali mnogo proti ena), zbirk (ena

proti mnogo ali mnogo proti mnogo), kot tudi skalarnih in naštevalnih tipov. Ponuja

mehanizem za generiranje kompleksnih tipov iz podatkovne baze, kateri celo ponujajo

podporo za poizvedbe. Na drugi strani Entity Framework omogoča podporo za zbirke,

entitetne tipe, skalarne in naštevalne. Ne omogoča mehanizma za generiranje kompleksnih

tipov.

DOGODKI (angl. »events«)

NHibernate ima bogat spekter dogodkov, vsebuje jih preko 20, med najbolj pogostimi

so:[27]

• pred/po-nalaganje (Load),

• pred/po-brisanje (Delete),

• pred/po-vstavljanje (Insert),

• pred/po-posodabljanje (Update).

Entity Framework ima na voljo 2 dogodka:

• ObjectMaterialized (po tem, ko entiteto naložimo iz podatkovne baze),

• shranjevanje sprememb - SavingChanges (pred shranjevanjem sprememb, kar

vključuje vstavljanje, brisanje, posodabljanje).

SLEDENJE SPREMEMBAM (angl. »tracking changes«)

Tako za NHibernate, kot tudi Entity Framework, so vse spremembe vodene na podlagi

ustrezne implementacije enote dela (angl. »unit of work«). Entitete so lahko priložene

Page 62: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

51

(angl. »attached«) ali ločene (angl. »deatached«). EF nudi možnost, da posamezna entiteta

za sebe vodi spremembe (angl. »self-tracking entitites«).

SERIJSKO IZVAJANJE SQL (angl. »sql batching«)

NHibernate ima polno podporo za serijsko izvajanje vstavljanja v primeru, da ID generator

ni vezan na podatkovno bazo (ne more bit uporabljen z identiteto).

Entity Framework ne pozna serijskega izvajanja SQL-ov. [28]

6.4 HITROST KLICEV NA PODATKOVNO BAZO

Izvedli smo zmogljivostne teste na različnih količinah podatkov. Najprej smo preizkusili na

enem samem podatku, nato na 100, kasneje na 1000, na koncu pa še na 10.000 podatkih.

To smo storili na dodajanju, brisanju in posodabljanju. Izpustili smo 100 in 1000 test za

branje, saj se rezultati praktično ne razlikujejo.

6.4.1 DODAJANJE PODATKOV

Vstavljanje podatkov z uporabo EF je v povprečju dva krat počasnejše od vstavljanja

podatkov z uporabo NHibernata. Za vstavljanje 10.000 vrstic v tabelo je EF potreboval več

kot 200 sekund. NHibernate na drugi strani je porabil več kot 3 krat manj časa, in sicer 63

sekund.

Graf 6.1: Čas v odvisnosti od količine vstavljenih podatkov za posamezno ogrodje

0

5

10

15

20

1 podatek 100 podatkov 1000 podatkov

Vstavljanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

0

50

100

150

200

250

10000 podatkov

Vstavljanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

Page 63: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

52

6.4.2 BRANJE PODATKOV

Z uporabo NHibernate, je branje enega samega podatka za skoraj 70% hitreje kot branje

enega podatka z uporabo Entity Frameworka. Pri količini 10.000 podatkov se ta razlika

nekoliko zmanjša, a zaradi hitrosti poizvedbe je razlika praktično neopazna.

Graf 6.2: Čas v odvisnosti od količine branih podatkov

6.4.3 UREJANJE PODATKOV

Največje razlike med ogrodjema so nastale pri urejanju podatkov. Zasluge gre pripisati

podpori NHibernata za izvajanje serijskih SQL stavkov, katerih Entity Framework sploh ne

podpira.

Graf 6.3: Čas v odvisnosti od količine urejanih podatkov

0

0,5

1

1,5

2

2,5

1 podatek 10000 podatkov

Branje podatkov iz PB (v sekundah)

Entity Framework Nhibernate

0

5

10

15

20

25

1 podatek 100 podatkov 1000 podatkov

Urejanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

0

50

100

150

200

250

10000 podatkov

Urejanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

Page 64: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

53

6.4.4 BRISANJE PODATKOV

Tudi pri brisanju podatkov so nastale enormne razlike pri večji količini le-teh. Tako kot pri

posodabljanju podatkov, gre tudi tukaj za prednost NHibernata za izvajanja serijskih SQL

stavkov. Izvajanje brisanja na 1000 podatkih je z uporabo Entity Frameworka za skoraj 10x

počasnejši od svojega konkurenta. Pri 10.000 podatkih je razlika že več kot 10 kratna.

Graf 6.4: Čas v odvisnosti od količine brisanih podatkov

0

5

10

15

20

1 podatek 100 podatkov 1000 podatkov

Brisanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

0

20

40

60

80

10000 podatkov

Brisanje podatkov v PB (v sekundah)

Entity Framework Nhibernate

Page 65: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

54

6.5 PREDNOSTI/SLABOSTI OGRODIJ

Pomembnejše lastnosti oziroma funkcionalnosti obeh ogrodij primerjamo v sledeči tabeli.

ENTITY FRAMEWORK NHIBERNATE

Sledenje

spremembam

• spremembe vodene na

podlagi implementacije

»unit of work«,

• entitete omogočajo lastno

sledljivost

• spremembe vodene na

podlagi implementacije

»unit of work«

Integracija in

dokumentacija

• veliko Microsoftovih orodij

integriranih z EF,

• veliko primerov in

dokumentacije na spletu

• brez integracije znotraj

Microsoftovih ogrodij,

• zadostna, osnovna

dokumentacija s primeri

Pred

pomnjenje

• prvo-nivojsko • prvo-nivojsko,

• drugo nivojsko

Možnost

konfiguracije

• osnovna, preko kode • napredna, preko kode,

• možnost konfiguracije

preko XML dokumentov

Zahtevnost • preprost začetek,

• nizka učna krivulja

• težji začetek,

• visoka učna krivulja

Asinhronost • polna podpora asinhronim

klicem

• asinhronost ni podprta

Poizvedbe • LINQ to Entities (največkrat

uporabljen) je izpopolnjen,

• manjša podpora različnim

poizvedovalnim API-jem

• večja podpora različnim

poizvedovalnim API-jem,

• implementiran LINQ

vključuje manj

funkcionalnosti

Hitrost • občutno počasnejši pri

vstavljanju, brisanju in

posodabljanju večjega

nabora podatkov,

• primerljiva pri pridobivanju

podatkov

• občutno hitrejši pri večji

količini podatkov za

vstavljanje, brisanje in

posodabljanje

Tabela 6.2: Primerjava lastnosti obeh ogrodij

Page 66: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

55

7 SKLEP

Odločitev, kako bomo manipulirali s podatki, je bistvenega pomena v času načrtovanja

aplikacije. Na voljo je veliko pristopov, ki zagotavljajo delo s podatki. Objektno-relacijska

preslikava je eden izmed teh pristopov, kjer vidno izstopata dve ogrodji, ki smo ju obdelali

v diplomskem delu. Preučili smo ogrodji od strukture pa vse do same uporabe. Odločitve,

katero bi predlagali razvijalcem, ni mogoče enostavno in brezpogojno določiti. Ugotovili

smo, da sta tako Entity Framework, kot tudi NHibernate popolnoma podprti s strani

relacijskih podatkovnih baz. Obe ponujata velik nabor funkcionalnosti s sicer nekaj vidnimi

razlikami, ki lahko pri določenih tipih razvijalcev odločilno vplivajo na izbor. Ena izmed teh

lastnosti je prav gotovo podpora asinhronim funkcijam pri Entity Frameworku in XML

definicije razredov ter preslikav pri NHibernatu. To da ogrodju možnost uporabe modelov

na različnih projektih. Za razvijalce začetnike je zaradi preprostosti ogrodja Entity

Framework veliko boljša izbira, kot bi bila izbira konkurenta. Za ogrodje EF je namreč na

spletu veliko vodičev, primerov kode, dokumentacije, debat na forumu, zaradi česar se

lahko ob morebitnih preprekah težave hitro rešijo. Pri izbiri ogrodja NHibernate pa se

razvijalec v začetku uporabe sooča z drugačnim načinom pristopa definicije preslikav. V

nadaljevanju mu to omogoča veliko naprednejšo uporabo ogrodja, kar vodi k večji

učinkovitosti. Za mnoge razvijalce bi pri izboru ogrodja lahko vplivala razlika med hitrostjo

izvajanja operacij na modelu. Izvajanje osnovnih CRUD metod pri NHiberante je na podlagi

naših testiranj pri večjem številu podatkov tudi za nekaj krat hitrejše od njegovega

konkurenta. Testiranje smo opravljali pri enakih pogojih za obe ogrodji.

Na podlagi ugotovitev tekom izdelave diplomskega dela lahko zaključimo, da sta za večino

aplikacij obe ogrodji povsem konkurenčni. Podamo lahko mnenje, da se za aplikacije, kjer

je bistvenega pomena hitrost izvajanja operacij, uporabi ogrodje NHibernate. Na drugi

strani bi izbrali in priporočali Entity Framework razvijalcem začetnikom, ki šele prihajajo na

velik, a zahteven IT trg.

Page 67: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

56

8 LITERATURA

[1] Wikipedia, „ADO.NET“, 2017. [Na spletu]. Dostopno:

https://en.wikipedia.org/wiki/ADO.NET. [Dostopano: 20-jun-2017].

[2] L. Debeljak, „ADO.NET: Osnova za gradnjo sodobne podatkovne programske

opreme“, 2002.

[3] Wikipedia, „Microsoft Data Access Components“, 2017. [Na spletu]. Dostopno:

https://en.wikipedia.org/wiki/Microsoft_Data_Access_Components. [Dostopano:

15-jun-2017].

[4] J. Hubbard, B. Wagner, in Y. Jin, „ADO.NET Architecture“, 2017. [Na spletu].

Dostopno: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-

net-architecture. [Dostopano: 24-jun-2017].

[5] J. Hubbard, B. Wagner, in Y. Jin, „.NET Framework Data Providers | Microsoft Docs“.

[Na spletu]. Dostopno: https://docs.microsoft.com/en-

us/dotnet/framework/data/adonet/data-providers. [Dostopano: 19-jul-2017].

[6] Wikipedia, „Comparison of ADO and ADO.NET“, 2014. [Na spletu]. Dostopno:

https://en.wikipedia.org/wiki/Comparison_of_ADO_and_ADO.NET. [Dostopano:

01-jul-2017].

[7] Wikipedia, „Object-relational mapping“, 2017. [Na spletu]. Dostopno:

https://en.wikipedia.org/wiki/Object-relational_mapping.

[8] G. Block, „Ten advantages of an ORM (Object Relational Mapper)“, 2006. [Na spletu].

Dostopno: https://blogs.msdn.microsoft.com/gblock/2006/10/26/ten-advantages -

of-an-orm-object-relational-mapper/.

[9] Y. Bugayenko, „ORM Is an Offensive Anti-Pattern“, 2017. [Na spletu]. Dostopno:

http://www.yegor256.com/2014/12/01/orm-offensive-anti-pattern.html.

[10] R. Krüger, „ORM vs. SQL: When should I use a SQL-centric persistence layer?“, 2016.

[Na spletu]. Dostopno: https://blog.oio.de/2016/05/12/orm-vs-sql-when-should-i-

use-a-sql-centric-persistence-layer/.

[11] Wikipedia, „Entity Framework“, 2017. [Na spletu]. Dostopno:

Page 68: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

57

https://en.wikipedia.org/wiki/Entity_Framework. [Dostopano: 10-jul-2017].

[12] J. Lerman in R. Miller, Programming Entity Framework: Code First. O’Reilly Media,

2011.

[13] Tutorials Point, „Entity Framework“, 2015.

[14] „Entity Framework Architecture“. [Na spletu]. Dostopno:

http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx.

[Dostopano: 25-jun-2017].

[15] P. Sanghani, „C#.NET: Entity Framework Basic - Getting Started“, 2011. [Na spletu].

Dostopno: http://parassanghani.blogspot.si/2011/02/entity-framework-

basics.html. [Dostopano: 19-jul-2017].

[16] J. Hubbard, M. Wenzel, in Y. Jin, „Writing an Entity Framework Data Provider |

Microsoft Docs“. [Na spletu]. Dostopno: https://docs.microsoft.com/en-

us/dotnet/framework/data/adonet/ef/writing-an-ef-data-provider. [Dostopano:

19-jul-2017].

[17] „Entity Framework Version History“, 2016. [Na spletu]. Dostopno:

https://msdn.microsoft.com/en-us/library/jj574253(v=vs.113).aspx. [Dostopano:

11-jul-2017].

[18] NuGet, „NuGet Gallery | EntityFramework 6.1.3“, 2017. [Na spletu]. Dostopno:

https://www.nuget.org/packages/EntityFramework. [Dostopano: 24-jul-2017].

[19] R. Avberšek, „Primerjava pristopov k razvoju podatkovnega sloja z ADO .NET Entity

Framework“, 2012.

[20] Wikipedia, „NHibernate“, 2017. [Na spletu]. Dostopno:

https://en.wikipedia.org/wiki/NHibernate.

[21] Tutorials Point, „NHibernate“, 2015.

[22] P. Prathap, „Born to Automate : NHibernate – Architecture (Part 2)“, 2010. [Na

spletu]. Dostopno: http://blogsprajeesh.blogspot.si/2010/01/nhibernate -

architecture.html. [Dostopano: 10-jul-2017].

[23] J. Kanjilal, „Entity Framework 7: Providing support for new platforms and new data

stores | InfoWorld“, 2015. [Na spletu]. Dostopno:

http://www.infoworld.com/article/2885466/application-development/entity-

Page 69: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …

58

framework-7-providing-support-for-new-platforms-and-new-data-stores.html.

[Dostopano: 09-jul-2017].

[24] „Configure Entity Mappings using Fluent API in EF Code-First“. [Na spletu].

Dostopno: http://www.entityframeworktutorial.net/code-first/configure-entity-

mappings-using-fluent-api.aspx. [Dostopano: 01-jul-2017].

[25] J. Allen, „Comparing NHibernate and Entity Framework“, 2012. [Na spletu].

Dostopno: https://www.infoq.com/news/2012/06/NHibernate-EF. [Dostopano: 02-

avg-2017].

[26] V. Khorikov, „Entity Framework 6 (7) vs NHibernate 4: DDD perspective - Enterprise

Craftsmanship“, 2014. [Na spletu]. Dostopno:

http://enterprisecraftsmanship.com/2014/11/29/entity-framework-6-7-vs-

nhibernate-4-ddd-perspective/. [Dostopano: 02-avg-2017].

[27] NHiberante, „NHibernate“. [Na spletu]. Dostopno:

http://nhibernate.info/doc/index.html. [Dostopano: 01-jul-2017].

[28] „Chapter 13. Batch processing“. [Na spletu]. Dostopno:

http://nhibernate.info/doc/nhibernate-reference/batch.html. [Dostopano: 09-avg-

2017].

Page 70: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …
Page 71: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …
Page 72: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …
Page 73: PRIMERJAVA OGRODIJ ENTITY FRAMEWORK IN NHIBERNATE …