loading - Problem with NHibernate mapping when Id is in abstract base class -


i'm quite new nhibernate, doing right until face problem, looks nhibernate bug, being newbie it, can fault

having base class id , equality stuff

    public abstract class objetoconid {     public objetoconid()     {         id=newid();     }      public virtual guid id {get;private set;}      public override bool equals(object o)     {         if (object.referenceequals(this,o))             return true;          if (o==null) return false;          objetoconid oid;          oid= o objetoconid;         if (!object.referenceequals(oid,null))             return (id.equals(oid.id));          return (base.equals(o));     }     public override int gethashcode()     {         byte[] bid;          bid=id.tobytearray();          return  ((int32)(bid[8]^bid[12])<<24) +                 ((int32)(bid[9]^bid[13])<<16) +                  ((int32)(bid[10]^bid[14])<<8) +                  ((int32)(bid[11]^bid[15]));     }      public virtual bool equals(objetoconid o)     {         if (object.referenceequals(this,o))             return true;          if (object.referenceequals(o,null)) return false;             return (id.equals(o.id));     }      public virtual string tostring()      {         return this.gettype().fullname         + "[id=" + id + "]";     }      protected virtual guid newid()     {         return guidcomb.newguid();     }      public static bool operator == (objetoconid x,objetoconid y)     {         if(object.referenceequals(x,y))             return true;         if(object.referenceequals(x,null))             return false;         return x.equals(y);     }      public static bool operator != (objetoconid x,objetoconid y)     {         return !(x==y);     }      /// <summary>     /// metodo interno para permitir el testing     /// </summary>     /// <param name="id"></param>     internal void setid(guid id)     {         id=id;     } } 

and entity

public class propiedad : objetoconid,ipropiedad {     [obsolete("persistance constructor only")]     public propiedad ()     {     }       public propiedad (ilist<idescripcioncalificada> descripciones)     {         descripciones=new dictionary<string,idescripcioncalificada>(descripciones.count);         foreach(idescripcioncalificada d in descripciones)             descripciones.add(d.nombre,d);     }       #region ipropiedad implementation     public virtual idictionary<string, idescripcioncalificada> descripciones {get;private set;}      #endregion    } 

and mapping

    public class mapeopropiedad : classmap<propiedad> {      public mapeopropiedad()     {         id(x => x.id).column("pro_id").generatedby.assigned();         hasmany<descripcioncalificada>(x => x.descripciones)         .cascade.saveupdate()         .asmap<string>(index => index.nombre)         ;     } } 

the test is

[testfixture] public class testpropiedadpersistencia {      [testfixturesetup]     public void testfixturesetup()     {          string connectionstring="server=127.0.0.1;database=ana;user id=dev-test;password=dev-test;";          fcfg=fluently.configure()             .database(postgresqlconfiguration.postgresql82.connectionstring(connectionstring))             .mappings(m => m.fluentmappings.addfromassemblyof<mapeopropiedad>());           fcfg.exposeconfiguration(cfg => new schemaexport(cfg).create(false, true));         sessions=fcfg.buildsessionfactory();     }       isessionfactory sessions;     fluentconfiguration fcfg;        [testfixtureteardown]     public void testfixtureteardown()     {         fcfg.exposeconfiguration(cfg => new schemaexport(cfg).drop(false, true));         sessions.close();         sessions = null;         fcfg = null;     }       [test]     public void cancorrectlymappropiedad()     {         descripcioncalificada descri1=new descripcioncalificada("descri",new descripcion("esta es la descri"));         descripcioncalificada descri2=new descripcioncalificada("descrilarga",new descripcion("esta es la descrilarga"));         dictionary<string,idescripcioncalificada> descris=new dictionary<string, idescripcioncalificada>(2);          descris.add(descri1.nombre,descri1);         descris.add(descri2.nombre,descri2);          new persistencespecification<propiedad>(sessions.opensession(),new customequalitycomparer() )             .checkproperty(c => c.descripciones,descris)             .verifythemappings();     }  } 

the thing test fails unless put not.lazyload() in mapping gives mapping error

ana.nucleo.lenguaje.test.testdescripcioncalificadapersistencia (testfixturesetup): fluentnhibernate.cfg.fluentconfigurationexception : invalid or incomplete configuration used while creating sessionfactory. check potentialreasons collection, , innerexception more detail.     ----> nhibernate.invalidproxytypeexception : following types may not used proxies: ana.catalogacion.implementacion.propiedad: method setid should 'public/protected virtual' or 'protected internal virtual' 

without lazy loading pass, , if put id property in propiedad class , not inherit objetoconid pass, , without not.lazyload().

anyone can confirm nh bug, or appreciated

edit:

i've found problem, fault. missed setid internal function not being virtual protected , confused setter of id property, , missunderstood execption

fer

i've found problem, fault. missed setid internal function not being virtual protected , confused setter of id property, , missunderstood execption


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -