Hi Marchal:
By the exception you gave, I presume you are using WebUtil and that module
currently I am not using it.

However doing a quick review in the burrow source I found the following code
in "EntityLoader.GetId" (Wich is called in your stack trace):

        public object GetId(object o)
        {
            if (o == null)
            {
                return null;
            }
         PropertyInfo pi = null;
try {
         pi = o.GetType().GetProperty("Id");
         }
         catch ( AmbiguousMatchException e) {

         }
if (pi != null)
            {
                return pi.GetValue(o, null);
            }
            else
            {
                return GetSession(o.GetType()).GetIdentifier(o);
            }
        }

So, I'm totally agree with you, apparently the code to find out the
identifier first try to find a property called "Id", if this is not found
take the current ISession to take that information. Unfortunately it uses
the statement: "GetSession(o.GetType())" to retrieve the ISession, so it may
be other Session than you are using...

My advice: You can:

A - Submit a JIRA ticket with that issue and wait for corrections
B - Include in your entities a property "Id" (It is just a guess I don't
know if it can works)
C - Try to fix yourself the code ( I suggested modify the
statement GetSession(o.GetType()) to other similar to your DAO does)

I expected this can help!

Oscar

2009/1/28 Marchal Jb <[email protected]>

> The trunk don't resolve this problem in Burrow with Multiple databases.
>
> In my GenericDAO, there is a method to bring a good ISession :
>
> protected ISession Session
>         {
>             get
>             {
>                 string PersitenceUnitToUse = (string)new
> AppSettingsReader().GetValue("persistenceUnit", typeof(String));
>
>                 if (string.IsNullOrEmpty(PersitenceUnitToUse))
>                     return new BurrowFramework().GetSession(_NHTypeEntite);
>                 else
>                     return new
> BurrowFramework().GetSession(PersitenceUnitToUse);
>             }
>         }
>
> But i think some times NH automaticaly put a ISession (when data changed
> for example) and without called my ISession Session method. And i can see
> that NH give the first PersitentUnit ;(
>
> In this case where can i precise my ISession logic ?
>
> for details : The exception i have when NH use the wrong PersistentUnit
> (...)
> in SessionImpl.cs in the method :
> public object GetIdentifier(object obj)
>
> if (obj is INHibernateProxy) { (..) }
> else
> {
>        EntityEntry entry = persistenceContext.GetEntry(obj); *//HERE IS
> THE PROBLEM : not the good persistenceContext ?!
> *       if (entry == null) //entry is not find :(
>        {
>                throw new TransientObjectException("the instance was not
> associated with this session");
>        }
>        return entry.Id;
> }
> and the stack trace :
>
> [TransientObjectException: the instance was not associated with this
> session]
>    NHibernate.Impl.SessionImpl.GetIdentifier(Object obj) in
> C:\DICSIT\nouveau\sources\NHibernate\Impl\SessionImpl.cs:1268
>    NHibernate.Burrow.Util.EntityLoader.GetId(Object o) in
> C:\DICSIT\nouveau\sources\NHibernate.Burrow\Util\EntityLoader.cs:62
>    NHibernate.Burrow.WebUtil.Impl.EntityVSFInterceptorBase.OnSave(Object
> toSave, Object objectInStateContainer) in
> C:\DICSIT\nouveau\sources\NHibernate.Burrow.WebUtil\Impl\EntityVSFInterceptor.cs:16
>    NHibernate.Burrow.WebUtil.Impl.StatefulFieldSaver.ProcessFields() in
> C:\DICSIT\nouveau\sources\NHibernate.Burrow.WebUtil\Impl\StatefulFieldSaver.cs:23
>    NHibernate.Burrow.WebUtil.Impl.StatefulFieldProcessor.Process() in
> C:\DICSIT\nouveau\sources\NHibernate.Burrow.WebUtil\Impl\StatefulFieldProcessor.cs:40
>
> NHibernate.Burrow.WebUtil.Impl.StatefulFieldPageModule.page_PreRenderComplete(Object
> sender, EventArgs e) in
> C:\DICSIT\nouveau\sources\NHibernate.Burrow.WebUtil\Impl\StatefulFieldPageModule.cs:66
>    System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +2063008
>    System.Web.UI.Page.ProcessRequestMain(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2247
> Thanks for your help !
>
> JbM
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to