1..* és *..* asszociáció lekérdezése egy függvény segítségével
1..* és *..* asszociáció lekérdezése egy függvény segítségével
Nem volt egyszerű szülés, őszintén mondom. Nagyjából a harmincadik megoldás lett a nyerő.
Mit is akartam?
C# és NHibernate segítségével egy olyan eljárást írni, ami 1..* kapcsolat esetén is, és *..* kapcsolat esetén is le tudja kérdezni a mester azonosítója alapján a hozzá tartozó értékeket.
Egy egyszerű példán keresztül szemléltetem.
Létezik egy iskola, ahol vannak tanárok, vannak osztályok, és vannak tantárgyak. Minket a tanárok érdekelnek, illetve az osztályok.
Szükségünk lenne arra, hogy egy – egy tanár melyik osztályban tanít, illetve visszafele is szükség lenne arra, hogy adott osztályba melyik tanárok tanítanak. És arra is szükségünk van, hogy egy – egy tanár milyen tantárgyakat tanít.
A tanár és az osztály között *..* azaz ManyToMany kapcsolat van, hiszen egy tanár több osztályban is taníthat, és egy osztályban több tanár is taníthat. A tanár és a tantárgy között 1..* azaz OneToMany, azaz egy tanárnak több tantárgya is lehet.
A megoldás viszonylag egyszerű, csak kellett hozzá jó pár napnyi dokumentáció böngészés:
123return
session.CreateCriteria(
"Classes"
,
"a"
)
.CreateCriteria(
"Teacher"
,
"b"
, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq(
"b.Id"
, 5)).List();
A fenti kódrészlet lehozza az 5 -ös azonosítójú osztályhoz tartozó tanárok listáját.
123return
session.CreateCriteria(
"Teachers"
,
"a"
)
.CreateCriteria(
"Class"
,
"b"
, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq(
"b.Id"
, 12)).List();
Ez a kódrészlet lehozza azokat a termeket, ahol a 12 -es azonosítójú tanár tanít.
123return
session.CreateCriteria(
"Teacher"
,
"a"
)
.CreateCriteria(
"Subject"
,
"b"
, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq(
"b.Id"
, 12)).List();
És végezetül a 12 -es azonosítójú tanár összes tantárgyát tölti le az eljárás.
Mint látszik, a *..* és az 1..* kapcsolatban csak annyi a különbség, hogy a *..* kapcsolatnál a master adatokat többesszámmal láttam el.
Okoska