Hi!
As a new user to nHibernate I ran in to trouble with a slow query.
Currently I ended up using a static query instead of a criteria based
query. I do expect it to my own fault but as a newbie I can't see what
I do wrong or should do it instead.
Would be very happy if somebody could point me in the right direction
or tell me what I do wrong!
Cheers
/Johan
My trial criteria looks like this:
ICriteria criteria = NHibernateSession.CreateCriteria(PersitentType)
.SetFetchMode("Anvandare", FetchMode.Join)
.SetFetchMode("Anvandare.AnvandareKunds", FetchMode.Join)
.SetFetchMode("Anvandare.AnvandareKunds.Kund", FetchMode.Join)
.SetFetchMode("Anvandare.AnvandareKunds.Kommun", FetchMode.Join)
.SetFetchMode("Anvandare.AnvandareBehorighetEnhets",
FetchMode.Join)
.SetFetchMode("Anvandare.AnvandareBehorighetEnhets.Enhet",
FetchMode.Join);
var anvandarcriteria = criteria.CreateCriteria((Elev e) =>
e.Anvandare);
var anvandarekundcriteria = anvandarcriteria.CreateCriteria((Anvandare
a) => a.AnvandareKunds);
var anvandarekundkundcriteria =
anvandarekundcriteria.CreateCriteria((AnvandareKund a) => a.Kund)
.Add((Kund k) => k.ID == kundId);
var anbandarebehorighet = anvandarcriteria.CreateCriteria((Anvandare
a) => a.AnvandareBehorighetEnhets)
.Add((AnvandareBehorighetEnhet abe) => abe.Behorighet.ID ==
(int)BehorighetEnum.Elev)
.Add((AnvandareBehorighetEnhet abe) => abe.Inaktiv == false);
anbandarebehorighet.CreateCriteria((AnvandareBehorighetEnhet abe) =>
abe.Enhet)
.Add((Enhet e) => e.ID == enhetId);
And the SQL query ( a bit extended compared to above) like this:
SELECT Elev.Id AS ElevId
, Anvandare.personnummer AS Personnr
, anvandare_kund.enamn AS Enamn
, anvandare_kund.fnamn AS Fnamn
, anvandare_kund.adress AS Adress
, anvandare_kund.postnr AS Postnr
, anvandare_kund.ort AS Ort
, anvandare_kund.telefon AS Telefon
, anvandare_kund.hemkommun AS Kommun
, Enhet.skolID AS SkolID
, Kursgrupp.namn AS Klass
, Arskurs.Kort AS Arskurs
, Enhet.namn AS Skolnamn
, Fritids_Grundskola.Namn AS FritidsNamn
, Fritids_Grundskola.Skolkod AS FritidsSkolkod
, Fritids_Avdelning_Grundskola.Namn AS AvdelningsNamn
, Sprak.scb AS HemspraksKod
FROM
dbo.Elev
LEFT OUTER JOIN dbo.Anvandare
ON Elev.anvandare_id = Anvandare.id
LEFT OUTER JOIN dbo.anvandare_kund
ON anvandare_kund.anvandare_id = Anvandare.id
LEFT OUTER JOIN dbo.Anvandare_Behorighet_Enhet
ON Anvandare_Behorighet_Enhet.anvandare_id = Anvandare.id
LEFT OUTER JOIN dbo.Enhet
ON Elev.SenasteSkola_id = Enhet.id
LEFT OUTER JOIN dbo.Elev_Kursgrupp
ON Elev_Kursgrupp.elev_id = Elev.Id
LEFT OUTER JOIN dbo.Kursgrupp
ON Elev_Kursgrupp.kursgrupp_id = Kursgrupp.id
LEFT OUTER JOIN dbo.Grupptyp
ON Kursgrupp.grupptyp_id = Grupptyp.Id
LEFT OUTER JOIN dbo.Arskurs
ON Elev.arskurs_id = Arskurs.Id
LEFT OUTER JOIN dbo.Elev_FritidsAvdelning_Grundskola
ON Elev_FritidsAvdelning_Grundskola.elev_id = Elev.Id
LEFT OUTER JOIN dbo.Fritids_Avdelning_Grundskola
ON Elev_FritidsAvdelning_Grundskola.avdelning_id =
Fritids_Avdelning_Grundskola.id
LEFT OUTER JOIN dbo.Fritids_Grundskola
ON Fritids_Avdelning_Grundskola.fritids_id =
Fritids_Grundskola.id
LEFT OUTER JOIN dbo.Sprak
ON Elev.hemsprak_id = Sprak.id
WHERE
Anvandare_Behorighet_Enhet.inaktiv = 0
AND Anvandare_Behorighet_Enhet.enhet_id = :_enhetsId
AND Anvandare_Behorighet_Enhet.behorighet_id = 3
AND Grupptyp.Klass = 1";
AND Arskurs.Kort = :_arskurs";
ORDER BY
Enamn
, Fnamn
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.