You are on page 1of 79

0

Raunarstvo i informatika
Katedra za raunarstvo
Elektronski fakultet u Niu

Sistemi baza podataka

Fluent NHibernate
Letnji semestar 2015
1

Fluent NHibernate

Fluent NHibernate je projekat koji predstavlja alternativu kreiranju


standardnih NHibernate xml datoteka za mapiranje.
Fluent NHibernate omoguava kreiranje NHibernate mapiranja
korienjem C# koda sa jako definisanim tipovima podataka.
Ovakav pristup obezbeuje kreiranje lako itljivih i konciznih
mapiranja.
Fluent NHibernate nije sastavni deo NHibernate projekta ve
redstavlja nezavistan projekat.
Homepage: http://www.fluentnhibernate.org/
Tekua verzija: 2.0.1

2
Sistemi baza podataka

Fluent NHibernate

Svaka nova verzija Fluent NHibernate biblioteke je dostupna kao


NuGet paket.
NuGet predstavlja menader paketa za Microsoft Visual Studio
razvojno okruenje.
Homepage: http://www.nuget.org/
NuGet instalacija: http://docs.nuget.org/consume/installing-nuget
Nakon instalacije NuGet Package Manager Console je dostupna u
Visual Studio razvojnom okruenju korienjem stavke menija:

Tools / NuGet Package Manager / Package Manager Console

3
Sistemi baza podataka

Fluent NHibernate

Fluent NHibernate NuGet paket:


http://www.nuget.org/packages/FluentNHibernate
Instalacija korienjem NuGet Package Manager Console:

PM> Install-Package FluentNHibernate

4
Sistemi baza podataka

Fluent NHibernate

Instalacija korienjem NuGet menadera paketa reava problem


meuzavisnosti paketa, pa zajedno sa Fluent Nhibernate
bibliotekom instalira i neophodne biblioteke NHibernate i
Iesi.Collections.
Sve instalirane biblioteke NuGet ukljuuje kao reference u tekui
Visual Studio projekat.

5
Sistemi baza podataka

Fluent NHibernate

Primer: Deo baze podataka Lanac prodavnica igraaka

6
Sistemi baza podataka

Fluent NHibenrate

Struktura projekta:
Direktorijum Entiteti sadre domenske entitete (klase)
Direktorijum Mapiranja sadri klase koje domenske entitete mapiraju na
relacionu bazu podataka

7
Sistemi baza podataka

Fluent NHibernate

Entitet PRODAVNICA
Domenska klasa Prodavnica.cs
Nalazi se u direktorijumu Entiteti. Ovde e biti kreirane sve domenske klase.
Klasa mora da bude deklarisana kao public u okviru svog namespace-a

Sva svojstva klase koja e biti mapirani na kolone u tabeli relacione baze
podataka moraju biti deklarisana kao public
Sva svojstva klase koja e biti mapirana na kolone u tabeli relacione baze
podataka moraju biti deklarisana kao virtual. NHibernate predefinie sva
svojstva kako bi obezbedio proxy za lazy load uitavanje podataka.

8
Sistemi baza podataka

Fluent NHibernate

9
Sistemi baza podataka

Fluent NHibernate

Mapiranje PRODAVNICA
Klasa ProdavnicaMapiranje.cs
Nalazi se u direktorijumu Mapiranja. Ovde e biti kreirane sve klase koje
mapiraju domenske entitete na relacionu bazu podataka.

Klasa za mapiranje nasleuje klasu ClassMap<T> pri enu T predstavlja


domensku klasu koja se mapira. U konkretnom sluaju klasa ProdavnicaMapiranje
e naslediti klasu ClassMap<Prodavnica>
Sva mapiranja se navode u konstruktoru klase za mapiranje

10
Sistemi baza podataka

Fluent NHibernate

11
Sistemi baza podataka

Fluent Nhibernate

NHibernate aplikacija svoj rad bazira na korienju dva


kljuna interfejsa:
ISession
Primarni interfejs u NHibernate apliakcijama
Interfejs za rad sa NHibernate sesijama
Obezbeuje metode za osnovne CRUD operacije
Persistance manger poto obezbeuje mehanizme za perzistenciju
objekata
Jednostavno kreiranje i unitavanje sesije (ne zahteva puno resursa)
Nije thread safe. Nhibenate sesija se koristi samo u okviru jedne niti
Odgovara konekciju kod ADO.NET biblioteke

12
Sistemi baza podataka

Fluent NHibernate

ISessionFactory

Obezbeuje metode za kreiranje NHibernate sesija

SessionFactory je jako zahtevan sa stanovita resursa koje zahteva

Projektovan je tako da se kreira jedna instanca u aplikaciji koaj se deli


izmeu vee broja niti.

Ukoliko aplikacija pristupa razliitim bazama podataka, za svaku bazu


podataka se kreira po jedna SessionFactory instanca

Keira meta podatke i SQL upite koje Nhibernate generie tokom


rada

Obezbeuje korienje second-level keiranja podataka. Podaci koji su


pribavljeni u nekoj Unit of Work sesiji se kasnije mogu koristiti u
drugim Unit of Work sesijama. Potrebno je eksplicitno konfigurisati
podrku za ovu vrstu kea.

13
Sistemi baza podataka

Fluent NHibernate

Konfiguracija NHibernate mehanizma u aplikaciji je


implementirana u klasi DataLayer u vidu dve static
metode:
public static ISessionFactory CreateSessionFactory()
Konfiguracija baze podataka
Kreiranje i konfigurisanje SessionFactory objekta
public static ISession GetSession()
Implementacija singleton pattern-a koja obezbeuje samo jednu instancu
SessionFactory objekta u aplikaciji
Otvaranje NHibernate sesija

14
Sistemi baza podataka

Fluent NHibernate

Thread safe implementacija singleton pattern-a


CreateSessionFactory metoda se poziva samo ukoliko prethodno
objekat SessionFactory nije kreiran
Metoda kreira i otvara NHibernate sesiju
15
Sistemi baza podataka

Fluent NHibernate

16
Sistemi baza podataka

Fluent NHibernate

Konfiguracija baze podataka:


U konkretnom sluaju za Oracle DBMS specificira se Oracle dialect i Oracle
connection string
Primeri konfiguracija: https://github.com/jagregory/fluentnhibernate/wiki/Database-configuration

Kreiranje i konfiguracija SessionFactory objekta:


Definie se odgovarajua konfiguracija baze podataka
Specificiraju se mapiranja koja e se koristiti (U konkretnom sluaju specificiraju
se sva mapiranja koja se nalaze u istom assembly-iju kao i klasa
ProdavnicaMapiranja)
Specifikacije mapiranja: https://github.com/jagregory/fluentnhibernate/wiki/Fluent-configuration

Napomena: Za sluaj Oracle DBMS-a, na raunaru na


kome e se aplikacija koristiti neophodno je instalirati
odgovarajuu verziju Oracle klijenata.
17
Sistemi baza podataka

Fluent NHibernate

Primer jednostavne operacije uitavanja podatka:

18
Sistemi baza podataka

Mapiranja

Klasa ClassMap<T> predstavlja


FluentNHibernate mapiranja.

osnovnu

klasu

za

sva

public class ProdavnicaMapiranja : ClassMap<Prodavnica>


{

public ProdavnicaMapiranja()
{
}
}

Sva mapiranja se definiu u okviru konstruktora klase za mapiranje.


Sva mapiranja imaju oblik lambda izraza: x => x.Property

19
Sistemi baza podataka

Mapiranja

Id

metoda koja se koristi za mapiranje atributa klase koji


obezbeuje jednoznanu identifikaciju domenskih entiteta.
Ovi atributi klase se mapiraju na primarni klju u tabel relacione
baze podataka.

Id(x => x.Id)


.Column("BROJ")
.GeneratedBy.TriggerIdentity();

U konkretnom primeru atribut klase Id je mapiran na kolonu BROJ


u tabeli. Za definisanje vrednosti primarnog kljua se koristi triger
baze podataka.

20
Sistemi baza podataka

Mapiranja

Neki od tipinih opcija za generator primarnog kljua:


Assigned Aplikacija definie vrednost primarnog kljua pre snimanja objekta u
bazu podataka
Increment NHibernate generie vrednosti za primarni klju
inkrementiranjem poslednje upotrebljene vrednosti. Koristi se samo u
situacijama kada jedna aplikacija upisuje podatke u tabelu baze podataka.
Identity podrka za Identity kolone kod DB2, MySQL, MS SQL Server i
Sybase baza podataka.
Sequence podrka za generisanje vrednosti primarnih kljueva korienjem
sekvenci kod DB2, PostgreSQL i Oracle baza podataka. Prilikom upisivanja
objekta u bazu podata izvravaju se dve SQL naredbe: jedna koja pribavlja
primarni klju i druga INSER naredba.
TriggerIdentity baza podataka sama generie vrednost primarnog kljua
korienjem BEFORE INSERT trigera
Guid koristi se System.Guid za generisanje vrednosti primarnog kljua
GuidNative koristi se GUID generator baze podataka za generisanje
vrednosti primarnog kljua. Kao i kod sekvenci neophodne su dve SQL naredbe.
21
Sistemi baza podataka

Mapiranja

Map - metoda koja definie mapiranja izmeu atributa


domenske klase i kolona relacione baze podataka.

Map(x => x.NazivProdavnice);

U primeru je dati najednostavniji oblik poziva Map metode.


Podrazumeva da atribut domenske klase i kolona u tabeli imaju isto
ime.

Map(x => x.NazivProdavnice)

.Column("NAZIV");

U prethodnom primeru ime atributa klase i ime kolone u tabeli se


razlikuju pa je to neophodno eksplicitno specificirati.

22
Sistemi baza podataka

Mapiranja

U veini sluajeva neophodno je obezbediti mapiranje veza izmeu


entiteta.
Fluent Nhibernate podrava mapiranje sledeih tipova relacija:
many-to-one
one-to-many
many-to-many
one-to-one

23
Sistemi baza podataka

Mapiranja

References - metoda koja omoguava kreiranju meany-toone relacija izmeu entiteta i primenjuje se na many strani.
Kreira referencu na jedan entitet.
U terminologiji baza podataka: tabela koja poseduje strani klju koji
referencira primarni klju u nekoj drugoj tabeli.
Za sluaj klasa Prodavnica i Odeljenje:

class Prodavnica

{
}
class Odeljenje
{
public virtual Prodavnica PripadaProdavnici{get; set;}
}

24
Sistemi baza podataka

Mapiranja

U klasi za mapiranje OdeljenjeMapiranja moe da se doda


mapiranje oblika:

References(x => x.PripadaProdavnici);

U ovom sluaju se podrazumeva da u tabeli ODELJENJE postoji


strani klju Prodavnica_id.
Ukoliko je neophodno eksplicitno specificirati strani klju koristi se
sledea notacija:
References(x => x.PripadaProdavnici)
.Column("BROJP")
.LazyLoad();

U prethodnom primery eksplicitno je specificirano i LazyLoad


svojstvo mada je ono podrazumevano ponaanje.

25
Sistemi baza podataka

Mapiranja

HasMany - metoda koja omoguava kreiranje one-to-many


relacija izmeu domenskih entiteta.
Nalazi se na one strani many-to-one relacije.
Odgovara parent-child relaciji.
Najee korieni tip relacija izmeu domenskih entiteta.
Za sluaj klasa Prodavnica i Odeljenje:

class Prodavnica

{
public virtual IList<Odeljenje> Odeljenja {get; set;}
public Prodavnica()

{
Odeljenja = new List<Odeljenje>();
}
}
26
Sistemi baza podataka

Mapiranja

U klasi ProdavnicaMapiranja moe da se doda mapiranje oblika:

HasMany(x => x.Odeljenja);

U ovom sluaju se podrazumeva da u tabeli ODELJENJE postoji


strani klju Prodavnica_id.
Ukoliko je neophodno eksplicitno specificirati strani klju koristi se
sledea notacija:

HasMany(x => x.Odeljenja)

.KeyColumn("BROJP");

LazyLoad svojstvo je podrazumevano. Ukoliko treba da se iskljui


koristi se sledea notacija.

HasMany(x => x.Odeljenja)

.KeyColumn("BROJP")
.Not.LazyLoad();
27
Sistemi baza podataka

Mapiranja

Primer korienja HasMany relacije:

28
Sistemi baza podataka

Mapiranje

Primer povezivanje odeljenja sa prodavnicom. U ovom primeru


nova prodavnica e biti snimljena u bazu podataka ali ne i odeljena
koja su povezana sa njom.

29
Sistemi baza podataka

Mapiranja

Da bi se obezbedilo da se sva odeljenja iz kolekcije snime zajedno


sa prodavnicom kojoj pripadaju potrebno je ukljuiti Cascade
svojstvo HasMany veze.

HasMany(x => x.Odeljenja)

.KeyColumn("BROJP")
.Cascade.All();

Svojstvo Cascade specificira da li e se akcije nad roditeljeme


(vlasnikom kolekcije) preneti na decu (elemente kolekcije). Neke
od moguih vrednosti:
All prenose se sve akcije

Delete brisanje roditelja dovodi do brisanja dece


SaveUpdate prenose se samo Save i Update akcije

30
Sistemi baza podataka

Mapiranja

Kod ovakvih sluajeva treba voditi rauna o redosledu operacija


prilikom snimanja objekata u bazu podataka.
U ovom sluaju redosled operacija je sledei:
1.

Snima se roditelj i definie se vrednost njegovog primarnog kljua.

2.

Snimaju deca (lanovi kolekcije) kod kojih se vrednost stranog kljua postavi na
NULL.

3.

Odradi se dodatni UPDATE koji za decu definie vrednost stranog kljua.

Ovakav pristup moe da dovede do naruavanja ogranienja baze


podataka. To posebno vai za situaciju gde je za kolonu stranog
kljua postavljeno ogranienje NOT NULL. U tom sluaju drugi
korak obavezno dovodi do pojave greke.

31
Sistemi baza podataka

Mapiranja

U tim sluajevima se definie Inverse svojstvo HasMany relacije.

HasMany(x => x.Odeljenja)


.KeyColumn("BROJP")
.Inverse()
.Cascade.All();

U ovom sluaju se naglaava da je druga strana one-to-many relacije


u obavezi da odrava relaciju. Na taj nain NHibernate zna da
najpre mora da snimi objekat roditelja pa tek nakon toga objekte
decu.

32
Sistemi baza podataka

Mapiranja

Za sluaj ukljuenog Inverse svojstva redosled operacija je sledei:


o.PripadaProdavnici = p;
o1.PripadaProdavnici = p;
p.Odeljenja.Add(o);
p.Odeljenja.Add(o1);

s.Save(p);

33
Sistemi baza podataka

Mapiranja

Ukoliko se ne koriste Cascade i Inverse svojstva HasMany relacije


korisnik je u obavezi da sam obezbedi pravilan redosled snimanja
objekata.
s.Save(p);
o.PripadaProdavnici = p;
s.Save(o);
o1.PripadaProdavnici = p;
s.Save(o1);

p.Odeljenja.Add(o);
p.Odeljenja.Add(o1);
34
Sistemi baza podataka

Mapiranja

Kod NHibernate relacija za specificiranje kolekcija obavezno je


korienje interfejsa:
System.Collections.IEnumerable
System.Collections.ICollection

System.Collections.IList
System.Collections.IDictionary
System.Collections.Generic.IEnumerable<T>
System.Collections.Generic.ICollection<T>

System.Collections.Generic.IList<T>
System.Collections.Generic.IDictionary<K, V>
System.Collections.Generic.ISet<T>

Svaka kolekcija zahteva inicijalizaciju pre korienja.

35
Sistemi baza podataka

Mapiranja

HasManyToMany

metoda koja omoguava mapiranje


many-to-many veza izmeu domenskih klasa.
Funkcionie na slian nain kao i HasMany metoda, pri emu treba
voditi rauna da je odgovarajua struktura u bazi podataka potpuno
drugaija (strani klju kod HasMany relacije u odnosu na dodatnu
tabelu kod HasManyToMany relacije).

36
Sistemi baza podataka

Mapiranja

Primer deo baze podataka Lanac prodavnica igraaka

37
Sistemi baza podataka

Mapiranja

38
Sistemi baza podataka

Mapiranja

39
Sistemi baza podataka

Mapiranja
HasManyToMany(x => x.Prodavnice)

Prethodni oblik mapiranja podrazumeva postojanje tabele


ProdavnicaToRadnik koja poseduje dve kolone Radnik_id i
Prodavnica_id.
Za eksplicitno specificiranje naziva tabele i odgovarajuih kolona
koristi se sledei oblik:

HasManyToMany(x => x.Prodavnice)

.Table("RADI_U")
.ParentKeyColumn("JBR_RADNIK")
.ChildKeyColumn("BROJP");

40
Sistemi baza podataka

Mapiranja

Na slian nain HasManyToMany relacija moe da se definie i na


drugoj strani:

public virtual IList<Radnik> Radnici { get; set; }


HasManyToMany(x => x.Radnici)
.Table("RADI_U")

.ParentKeyColumn("BROJP")
.ChildKeyColumn("JBR_RADNIK")
.Inverse()
.Cascade.All();

41
Sistemi baza podataka

Mapiranja

42
Sistemi baza podataka

Mapiranja

43
Sistemi baza podataka

Mapiranja

Komplikovaniji sluaj kod koga tabela RADI_U poseduje dodatne


kolone.
Neophodno je kreirati poseban domenski entitet RadiU koji ima
kompozitni Id.
Klase Radnik i Prodavnica e imati one-to-many vezu ka
domenskom entitetu RadiU.

44
Sistemi baza podataka

Mapiranja

CompositeId metoda koja omoguava mapiranje


kompozitnih kljeva.
Za potrebe mapiranja kompozitnog kljua potrebno je napraviti
posebnu domensku klasu koja poseduje sve atribute kompozitnog
kljua i definie metode Equals i GetHashCode.
CompositeId poseduje dva svojstva:
KeyProperty atribut primarnog kljua predstavlja vrednost

KeyReference - atribut primarnog kljua predstavlja referencu na neki domenski


entitet

45
Sistemi baza podataka

Mapiranja

Primer klase koja predstavlja kompozitni klju

46
Sistemi baza podataka

Mapiranja

47
Sistemi baza podataka

Mapiranja

48
Sistemi baza podataka

Mapiranja

Obino se dodaju i HasMany mapiranja u klasi Radnik i Prodavnica.


Za sluaj klase Radnik:

public virtual IList<RadiU> RadiUProdavnice { get; set; }


HasMany(x => x.RadiUProdavnice)
.KeyColumn("JBR_RADNIK")

.Cascade.All()
.Inverse();

49
Sistemi baza podataka

Mapiranja

HasOne metoda koja omoguava mapiranje specijalnog

sluaja relacije izmeu domenskih klasa.


Umesto HasOne relacije najee se koristi References (many-toone) relacija.

50
Sistemi baza podataka

Mapiranja

51
Sistemi baza podataka

Mapiranja

Prilikom mapiranja nasleivanja FluentNHibernate podrava dve


strategije:
Table-per-Class-Hierarchy (Table-pet-Hierarchy)
Table-per-Class (Table-per-Type)
Table-per-Concrete-Class

Primer: http://www.codeproject.com/Articles/232034/Inheritancemapping-strategies-in-Fluent-Nhibernat

52
Sistemi baza podataka

Mapiranja

Primer: deo EER modela baze podataka Lanac prodavnica igraaka

53
Sistemi baza podataka

Mapiranja

Primer: Deo relacionog modela baze podataka Lanac prodavnica


igraaka

54
Sistemi baza podataka

Mapiranja

Za prevoenje entiteta ODELJENJE i njegovih podklasa iskoriena


je alternativa 8A i kompletna hijerarhija klasa je svedena na jednu
tabelu tabelu ODELJENJE.
Za mapiranje ovakve strukture Fluent NHibernate koristi strategiju
Table-per-Hierarchy.
Nadklasa Odeljenje se mapira na uobiajeni nain.
Dodatak
je
metoda
DiscriminateSubClassesOnColumn koja definie
kolonu (predikat) ija vrednost odreuje pripadnost konkretnoj
podklasi.
Za sluaj tabele ODELJENJE, kolona TIP definie o kom tipu
odeljenja se radi odnosno kojoj podklasi odeljenje pripada.

55
Sistemi baza podataka

Mapiranja

56
Sistemi baza podataka

Mapiranja

Za svaku podklasu se kreira posebna domenska klasa koja je


izvedena iz osnovne klase.
U konkretnom sluaju bie kreirane domenske klase:
OdeljenjeDo5, OdeljenjeOd6Do15 i OdeljenjeOdrasli. Ove
domenske klase su izvedene iz klase Odeljenje.
Prilikom mapiranja podklasa, klasa za mapiranje se izvodi iz Fluent
NHibernate klase SubclassMap<T>.
Za svaku podklasu se metodom DiscriminatorValue definie
vrednost kolone (kolona je definisana u nadklasi) koja odreuje da
vrsta tabele pripada odreenom tipu.
U konkretnom sluaju vrednost kolone TIP odreuje pripadnost
podklasi na sledei nain:
DO5 - pripadaju tipu OdeljenjeDo5
OD6DO15 - pripadaju tipu OdeljenjeOd6Do15
ODRASLI - pripadaju tipu OdeljenjeOdrasli

57
Sistemi baza podataka

Mapiranja

Ukoliko podklase poseduju dodatne kolone, one se mapiraju na


standardni nain.
Poto svako odeljenje pripada jednom od tri navedena tipa, klasa
Odeljenje moe da se definie kao apstraktna klasa.

58
Sistemi baza podataka

Mapiranja

59
Sistemi baza podataka

Mapiranja

60
Sistemi baza podataka

Mapiranja

61
Sistemi baza podataka

Mapiranja

Primer: Podklasa Sef

62
Sistemi baza podataka

Mapiranja

Primer: Podklasa Sef

63
Sistemi baza podataka

Mapiranja

Primer: Podklasa Sef

64
Sistemi baza podataka

Mapiranja

Primer: deo EER modela za bazu podataka Lanac


prodavnica igraaka

65
Sistemi baza podataka

Mapiranja

Primer: Deo relacionog modela baze podataka Lanac


prodavnica igraaka

66
Sistemi baza podataka

Mapiranja

Za prevoenje entiteta PROIZVOD i njegovih podklasa


iskoriena je alternativa 8c i hijerarhija klasa je prevedena
tako da svakoj podklasi odgovara jedna tabela u relacionoj bazi
podataka.

Za mapiranje ovakve strukture Fluent NHibernate koristi


strategiju Table-per-Class.
Nadklasa Proizvod se mapira na uobiajeni nain.

67
Sistemi baza podataka

Mapiranja

68
Sistemi baza podataka

Mapiranja

Za svaku podklasu se kreira posebna domenska klasa koja je


izvedena iz osnovne klase.
U konkretnom sluaju bie kreirane domenske klase:
IgrackaPlastika, Lutka, DodatakLutka, Automobil, Vojnik, Sagalica.
Ove domenske klase su izvedene iz klase Proizvod.
Prilikom mapiranja podklasa, klasa za mapiranje se izvodi iz Fluent
NHibernate klase SubclassMap<T>.
Metoda KeyColumn specificira primarni klju podklase koji je
istovremeno i strani klju koji referencira nadklasu.

69
Sistemi baza podataka

Mapiranja

70
Sistemi baza podataka

Mapiranja

71
Sistemi baza podataka

Mapiranja

72
Sistemi baza podataka

Mapiranja

Ukoliko se za prevoenje entiteta PROIZVOD i njegovih podklasa


iskoristi alternativa 8B, ne postoji posebna tabela za nadklasu dok
svaka podklasa dobija posebnu tabelu.

Za mapiranje ovakve strukture Fluent NHibernate koristi


strategiju Table-per-Concrete-Class.
U naem primeru ne bi vie postojala tabela PROIZVOD, dok bi
postojale tabele koja odgovaraju podklasama koje bi nasledile sve
kolone entiteta PROIZVOD.

73
Sistemi baza podataka

Mapiranja

74
Sistemi baza podataka

Mapiranja

75
Sistemi baza podataka

Mapiranja

Mapiranja nadklasa i podklasa su izuzetno problematina.


Treba izbegavati podklasa koje nemaju dodatna svostva.
Primer: Nema potrebe uvoditi posebne domenske podklase za
klasu Odeljenje.
Primer: Namerno je izostavljena specijalizacija klase Vojnik po tipu
materijala. Mogua je, ali nema previe smisla u praktinoj realizaciji.
Primer: Uvoenje podklase ef zavisi od konkretnog reenja. Ima
dodatno svojstvo koje je spcifino samo za efove.
Zbog nedostatka podrke za viestruko nasleivanje nije mogue
implementirati deljive podklase.
Ne postoji posebna podrka za implementaciju kategorija.
Kategorije se implementiraju korienjem References i/ili HasOne
relacija.
76
Sistemi baza podataka

Mapiranja

Za implementaciju deljive specijalizacije koristi se specijalni oblik


DiscriminateSubClassesOnColumn metode.

DiscriminateSubClassesOnColumn("")
.Formula("predikat")

Pri tome predikat ima oblik

CASE WHEN (METAL_FLAG = 'Da' AND PLASTIKA_FLAG = 'Ne' ) THEN 'Metal'


WHEN (METAL_FLAG = 'Ne' AND PLASTIKA_FLAG = 'Da' ) THEN 'Plastika'

WHEN (METAL_FLAG = 'Da' AND PLASTIKA_FLAG = 'Da' ) THEN


'MetalPlastika'
ELSE 'Nepoznato'
END

77
Sistemi baza podataka

Mapiranja

ComponentMap metoda koja specificira mapiranje


komponente koaj se esto javlja kod domenskih entiteta.

78
Sistemi baza podataka

Mapiranja

79
Sistemi baza podataka

You might also like