Laden...

Nhibernate - Problem mit dem Mapping? Aber wo?

Erstellt von b0b0nr1 vor 10 Jahren Letzter Beitrag vor 10 Jahren 598 Views
B
b0b0nr1 Themenstarter:in
92 Beiträge seit 2011
vor 10 Jahren
Nhibernate - Problem mit dem Mapping? Aber wo?

verwendetes Datenbanksystem: MSSQL2008

Hi,

ich habe seit kurzen auf NHIBERNATE umgestellt. Habe jedoch bei einer Tabelle besondere Probleme in dem nichts zurück kommt.

Hiereinmal das Mapping der besagten Tabelle:


  public class ContentAttachmentMap : ClassMapping<ContentAttachment> {
        
        public ContentAttachmentMap() {
			Table(CMS.CORE.Config.DB.Prefix.Replace("dbo.", "") +"Content_Attachment");
			Schema("dbo");
			Lazy(true);
			//Property(x => x.Pkid, map => map.NotNullable(true));
            Id<Guid>(x => x.Pkid, map => map.Generator(Generators.Guid));
			Property(x => x.Nid, map => map.NotNullable(true));
			Property(x => x.AttachmentType, map => { map.Column("attachment_type"); map.NotNullable(true); });
			Property(x => x.ContentType, map => { map.Column("content_type"); map.NotNullable(true); });
			Property(x => x.FPath);
			Property(x => x.FName);
			Property(x => x.ThumpNail);
			Property(x => x.AttachmentArgument);
			Property(x => x.ATitle);
        }
    }

Die Entity class:


    public class ContentAttachment {
        public virtual System.Guid Pkid { get; set; }
        public virtual int Nid { get; set; }
        public virtual string AttachmentType { get; set; }
        public virtual string ContentType { get; set; }
        public virtual string FPath { get; set; }
        public virtual string FName { get; set; }
        public virtual string ThumpNail { get; set; }
        public virtual string AttachmentArgument { get; set; }
        public virtual string ATitle { get; set; }
    }

Ich rufe um anhand der Pkid das Attachment zu kriegen folgende Funktion auf:


public ContentAttachment GetByPKid(Guid pkid)
         {
 
             using (ISession session = NHibernateHelper.OpenSession())
             {
                 return session.QueryOver<ContentAttachment>().Where(e => e.Pkid == pkid).Take(1).SingleOrDefault();
             }


         
         
         }


Ich lass aufm SQL Server den Profiler mitlaufen um besser die SQL Queires von nHiernate zu debuggen, jedoch kommt nicht mal ein SQL beim Server an, nhibernate spuckt jedoch auch keinerlei Fehler aus.

Woran könnte das liegen? Ich steht da grad etwas aufm Schlauch.

Es geht die komplette Entity nicht, also selbst wenn ich mir die ersten 100 Zeilen ausgeben lassen möchte kommt nichts zurück.

16.807 Beiträge seit 2008
vor 10 Jahren

Take(1) und darauf ein SingleOrDefault() lässt darauf schließen, dass Du nicht weißt, was es tut.
Lass das Take(1) weg - unabhängig obs daran liegt oder nicht.

Dass Du innerhalb eines Abfrage (GetByPKid) eine Session extra eröffnest zeigt, dass Du keine Ahnung hast, wie man mit DB Connections umgeht.
Siehe Dir dazu den Repository Pattern (der oft zusammen mit dem UnitOfWork-Pattern erklärt wird) an. Hilfreich dazu ist auch [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen

3.511 Beiträge seit 2005
vor 10 Jahren

Das Problem an sich ist, dass du die Entity als Lazy markiert hast. Du bekommst von HN in dem Moment nur ein Proxy zurück. Erst bei der Verwendung wird die Entity wirklich abgerufen. Das dürfte bei dir dann aber recht fix knallen, da die zugehörige Session bereits geschlossen ist.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)