Fluent Nhibernate internă

Am 3 mese (Maestru, Imagen, Linea) au fost:

Master
public virtual int Id { get; private set; }
public virtual Imagen imagen { get; set; }

Imagen
public virtual int Id { get; private set; }
public virtual Linea linea { get; set; }

Linea
public virtual int Id { get; private set; }
public virtual String Nombre { get; set; }

Am nevoie de o interogare ca aceasta:

SELECT * FROM dbo.Master 
INNER JOIN dbo.Imagen ON dbo.Master.imagen_id = dbo.Imagen.Id 
INNER JOIN dbo.Linea ON dbo.Imagen.linea_id = dbo.Linea.Id 
WHERE dbo.Linea_Id = 5

Dar nu știu cum să-i spun lui Fluent Nhibernate că a creat această interogare utilizând automapperul. Până acum am încercat acest lucru:

ICriteria c = session.CreateCriteria(typeof(Master))
  .CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin)
  .Add(Restrictions.Eq("img.linea_id", id_linea));

return c.List();

Dar am această eroare: nu a putut rezolva proprietatea: dbo de: ImageManager.Model.Entity.Master

Orice idei despre cum să faci o intrare internă? Mulțumesc anticipat

3

2 răspunsuri

Pentru început, aș scăpa de dbo.Imagen. Folosind interfața ICriteria trebuie să vă gândiți în termeni de obiecte, nu de tabele de baze de date, chiar dacă ar putea exista o mapare de la un obiect la tabel și proprietăți în coloane.

EDIT:
another option would be to use the QueryOver Lambda syntax.

   var list = session.QueryOver()
                        .JoinQueryOver(master => master.imagen)
                        .Where(imagen => imagen.linea.Id == 5)
                        .List();
8
adăugat
Ne pare rău despre asta ... învățând încă sintaxa QueryOver. Va repara.
adăugat autor Nathan Fisher, sursa
fix. Am testat asta. Ar trebui să funcționeze acum.
adăugat autor Nathan Fisher, sursa
Mulțumesc, Alredy a făcut asta. Sunt cu adevărat nou pentru Fluent Nhibernate.
adăugat autor lloiacono, sursa
Am incercat acest lucru dar am obtinut aceasta eroare: "nu am putut rezolva proprietatea: imagen.linea.Id de: ImageManager.Model.Entity.Master" De asemenea, am schimbat in .Where (Master => Master.imagen.linea.Id == 5 ), dar am aceeași eroare
adăugat autor lloiacono, sursa
functioneaza !!!, multumesc mult. Oricum am terminat folosind ICriteria pentru că aveam nevoie pentru a obține imaginile și liniile legate de acest maestru, de aceea am adăugat creaalias pentru imagen și hdd, dacă nu am făcut că am obține o LazyLoadException când încerc să accesez proprietățile imagine sau hdd pe obiectul meu principal.
adăugat autor lloiacono, sursa
aici este codul: ICriteria c = session.CreateCriteria (typeof (MasterHdd)) .CreateAlias ​​("imagen", "img", JoinType.InnerJoin) .CreateAlias ​​("hdd", h, JoinType.InnerJoin). "img.linea", "lin", JoinType.InnerJoin) .Adăugați (Restrictions.Eq ("lin.Id", id_linea)); întoarceți c.List ();
adăugat autor lloiacono, sursa

Nu mă pot abate de la comentariile dvs. anterioare, dacă l-ați fixat deja, dar aș încerca

ICriteria c = session.CreateCriteria(typeof(Master))

.CreateAlias("imagen", "img", JoinType.InnerJoin)
.CreateAlias("img.linea", "lin", JoinType.InnerJoin)
.Add(Restrictions.Eq("lin.Id", 5));

return c.List();

EDIT: Carcasa se modifică după cum se arată mai jos.

3
adăugat
Care este mesajul de eroare pe care îl primiți?
adăugat autor fluent, sursa
Un loc bun. În răspunsul meu am schimbat carcasa.
adăugat autor fluent, sursa
Cred că singura problemă cu acest răspuns va fi cazul referințelor obiectului. aveți Imagen în cazul în care @lloiacono are referința lui obiect este toate mici - imagen. Linia de referință va fi aceeași. Acesta este motivul pentru care nu funcționează.
adăugat autor Nathan Fisher, sursa
Uită-te la vara serii nhibernate de Stephen Bohlen, acum câțiva ani, dar elementele de bază sunt pentru ICriteria și nhibernate în general. de asemenea, aruncați o privire la funnelweblog.com este o platformă de blog open source bazată pe fluent-nhibernate
adăugat autor Nathan Fisher, sursa
Mulțumesc mult, în prezent lucrez la asta. Problema este că nu funcționează. Aceasta este eroarea pe care o primesc: "nu am putut rezolva proprietatea: Imagen de: ImageManager.Model.Entity.Master" Im folosindu-ma Automapping pentru a mapa everythin sub folderul model: .Mappings (m => m.AutoMappings.Add (model) în dosarul modelului am un subfolder numit Entitate și acolo am entitățile:
adăugat autor lloiacono, sursa
public clasa Master {public virtual ID Id {get; set privat; } public virtual Imagen imagen {get; a stabilit; } public virtual Hdd hdd {get; a stabilit; } Stringul public public hash_master {get; a stabilit; }}
adăugat autor lloiacono, sursa
clasa publică Linea {public virtual int Id {get; set privat; } public virtual int ObjVersion {get; a stabilit; } public virtual String Nombre {get; a stabilit; } public virtual String Tabla {get; a stabilit; } public virtual String NombreCorto {get; a stabilit; }} clasa publică Imagen {public virtual int Id {get; set privat; } public virtual String PartNumber {get; a stabilit; } public virtuale String Version {get; a stabilit; } String virtual public Deci {get; a stabilit; } public String Revision virtual {get; a stabilit; } public virtual Linea linea {get; a stabilit; } public virtual String Nombre {get; a stabilit; }}
adăugat autor lloiacono, sursa
Multumesc @NathanFisher care a fost într-adevăr problema. Nu mai am eroare, ai putea sa-mi recomanzi un manual bun pentru fluent, am citit wiki dar nu gasesc nimic despre Icriteria.
adăugat autor lloiacono, sursa