9 fluent hibernate.pdf
TRANSCRIPT
-
10
Sistemi baza podataka
Fluent NHibernate
Raunarstvo i informatika
Katedra za raunarstvo
Elektronski fakultet u Niu
Letnji semestar 2015
-
20Fluent 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
Sistemi baza podataka
-
30Fluent 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
Sistemi baza podataka
-
40Fluent NHibernate
Fluent NHibernate NuGet paket:
http://www.nuget.org/packages/FluentNHibernate
Instalacija korienjem NuGet Package Manager Console:
PM> Install-Package FluentNHibernate
Sistemi baza podataka
-
50Fluent 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.
Sistemi baza podataka
-
60Fluent NHibernate
Primer: Deo baze podataka Lanac prodavnica igraaka
Sistemi baza podataka
-
70Fluent NHibenrate
Struktura projekta:
Direktorijum Entiteti sadre domenske entitete (klase)
Direktorijum Mapiranja sadri klase koje domenske entitete mapiraju na relacionu bazu podataka
Sistemi baza podataka
-
80Fluent 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.
Sistemi baza podataka
-
90Fluent NHibernate
Sistemi baza podataka
-
10
0Fluent 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 pri enu T predstavlja domensku klasu koja se mapira. U konkretnom sluaju klasa ProdavnicaMapiranje
e naslediti klasu ClassMap
Sva mapiranja se navode u konstruktoru klase za mapiranje
Sistemi baza podataka
-
11
0Fluent NHibernate
Sistemi baza podataka
-
12
0Fluent 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
Sistemi baza podataka
-
13
0Fluent 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.
Sistemi baza podataka
-
14
0Fluent 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
Sistemi baza podataka
-
15
0Fluent NHibernate
Thread safe implementacija singleton pattern-a
CreateSessionFactory metoda se poziva samo ukoliko prethodno
objekat SessionFactory nije kreiran
Metoda kreira i otvara NHibernate sesiju
Sistemi baza podataka
-
16
0Fluent NHibernate
Sistemi baza podataka
-
17
0Fluent NHibernate
Konfiguracija baze podataka:
U konkretnom sluaju za Oracle DBMS specificira se Oracle dialect i Oracle connection string
Primeri konfiguracija: https://github.com/jagregory/fluent-nhibernate/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/fluent-nhibernate/wiki/Fluent-configuration
Napomena: Za sluaj Oracle DBMS-a, na raunaru na
kome e se aplikacija koristiti neophodno je instalirati
odgovarajuu verziju Oracle klijenata.
Sistemi baza podataka
-
18
0Fluent NHibernate
Primer jednostavne operacije uitavanja podatka:
Sistemi baza podataka
-
19
0Mapiranja
Klasa ClassMap predstavlja osnovnu klasu za sva
FluentNHibernate mapiranja.
public class ProdavnicaMapiranja : ClassMap
{
public ProdavnicaMapiranja()
{
}
}
Sva mapiranja se definiu u okviru konstruktora klase za mapiranje.
Sva mapiranja imaju oblik lambda izraza: x => x.Property
Sistemi baza podataka
-
20
0Mapiranja
Id metoda koja se koristi za mapiranje atributa klase kojiobezbeuje 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.
Sistemi baza podataka
-
21
0Mapiranja
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 iSybase 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.
Sistemi baza podataka
-
22
0Mapiranja
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.
Sistemi baza podataka
-
23
0Mapiranja
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
Sistemi baza podataka
-
24
0Mapiranja
References - metoda koja omoguava kreiranju meany-to-one 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;}
}
Sistemi baza podataka
-
25
0Mapiranja
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.
Sistemi baza podataka
-
26
0Mapiranja
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 Odeljenja {get; set;}
public Prodavnica()
{
Odeljenja = new List();
}
}
Sistemi baza podataka
-
27
0Mapiranja
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();
Sistemi baza podataka
-
28
0Mapiranja
Primer korienja HasMany relacije:
Sistemi baza podataka
-
29
0Mapiranje
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.
Sistemi baza podataka
-
30
0Mapiranja
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
Sistemi baza podataka
-
31
0Mapiranja
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.
Sistemi baza podataka
-
32
0Mapiranja
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.
Sistemi baza podataka
-
33
0Mapiranja
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);
Sistemi baza podataka
-
34
0Mapiranja
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);
Sistemi baza podataka
-
35
0Mapiranja
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
System.Collections.Generic.ICollection
System.Collections.Generic.IList
System.Collections.Generic.IDictionary
System.Collections.Generic.ISet
Svaka kolekcija zahteva inicijalizaciju pre korienja.
Sistemi baza podataka
-
36
0Mapiranja
HasManyToMany metoda koja omoguava mapiranjemany-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).
Sistemi baza podataka
-
37
0Mapiranja
Primer deo baze podataka Lanac prodavnica igraaka
Sistemi baza podataka
-
38
0Mapiranja
Sistemi baza podataka
-
39
0Mapiranja
Sistemi baza podataka
-
40
0Mapiranja
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");
Sistemi baza podataka
-
41
0Mapiranja
Na slian nain HasManyToMany relacija moe da se definie i na
drugoj strani:
public virtual IList Radnici { get; set; }
HasManyToMany(x => x.Radnici)
.Table("RADI_U")
.ParentKeyColumn("BROJP")
.ChildKeyColumn("JBR_RADNIK")
.Inverse()
.Cascade.All();
Sistemi baza podataka
-
42
0Mapiranja
Sistemi baza podataka
-
43
0Mapiranja
Sistemi baza podataka
-
44
0Mapiranja
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.
Sistemi baza podataka
-
45
0Mapiranja
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
Sistemi baza podataka
-
46
0Mapiranja
Primer klase koja predstavlja kompozitni klju
Sistemi baza podataka
-
47
0Mapiranja
Sistemi baza podataka
-
48
0Mapiranja
Sistemi baza podataka
-
49
0Mapiranja
Obino se dodaju i HasMany mapiranja u klasi Radnik i Prodavnica.
Za sluaj klase Radnik:
public virtual IList RadiUProdavnice { get; set; }
HasMany(x => x.RadiUProdavnice)
.KeyColumn("JBR_RADNIK")
.Cascade.All()
.Inverse();
Sistemi baza podataka
-
50
0Mapiranja
HasOne metoda koja omoguava mapiranje specijalnog sluaja relacije izmeu domenskih klasa.
Umesto HasOne relacije najee se koristi References (many-to-
one) relacija.
Sistemi baza podataka
-
51
0Mapiranja
Sistemi baza podataka
-
52
0Mapiranja
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/Inheritance-
mapping-strategies-in-Fluent-Nhibernat
Sistemi baza podataka
-
53
0Mapiranja
Primer: deo EER modela baze podataka Lanac prodavnica igraaka
Sistemi baza podataka
-
54
0Mapiranja
Primer: Deo relacionog modela baze podataka Lanac prodavnica
igraaka
Sistemi baza podataka
-
55
0Mapiranja
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 definiekolonu (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.
Sistemi baza podataka
-
56
0Mapiranja
Sistemi baza podataka
-
57
0Mapiranja
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.
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
Sistemi baza podataka
-
58
0Mapiranja
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.
Sistemi baza podataka
-
59
0Mapiranja
Sistemi baza podataka
-
60
0Mapiranja
Sistemi baza podataka
-
61
0Mapiranja
Sistemi baza podataka
-
62
0Mapiranja
Primer: Podklasa Sef
Sistemi baza podataka
-
63
0Mapiranja
Primer: Podklasa Sef
Sistemi baza podataka
-
64
0Mapiranja
Primer: Podklasa Sef
Sistemi baza podataka
-
65
0Mapiranja
Primer: deo EER modela za bazu podataka Lanac
prodavnica igraaka
Sistemi baza podataka
-
66
0Mapiranja
Primer: Deo relacionog modela baze podataka Lanac
prodavnica igraaka
Sistemi baza podataka
-
67
0Mapiranja
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.
Sistemi baza podataka
-
68
0Mapiranja
Sistemi baza podataka
-
69
0Mapiranja
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.
Metoda KeyColumn specificira primarni klju podklase koji jeistovremeno i strani klju koji referencira nadklasu.
Sistemi baza podataka
-
70
0Mapiranja
Sistemi baza podataka
-
71
0Mapiranja
Sistemi baza podataka
-
72
0Mapiranja
Sistemi baza podataka
-
73
0Mapiranja
Ukoliko se za prevoenje entiteta PROIZVOD i njegovih podklasaiskoristi alternativa 8B, ne postoji posebna tabela za nadklasu doksvaka podklasa dobija posebnu tabelu.
Za mapiranje ovakve strukture Fluent NHibernate korististrategiju 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.
Sistemi baza podataka
-
74
0Mapiranja
Sistemi baza podataka
-
75
0Mapiranja
Sistemi baza podataka
-
76
0Mapiranja
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.
Sistemi baza podataka
-
77
0Mapiranja
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
Sistemi baza podataka
-
78
0Mapiranja
ComponentMap metoda koja specificira mapiranje komponente koaj se esto javlja kod domenskih entiteta.
Sistemi baza podataka
-
79
0Mapiranja
Sistemi baza podataka