While designing the unit test I realized that this same issue also has
the effect that methods on entities do not trigger a load of lazy
properties. Since the reason is the same, I based the issue on this
effect.

Created issue with unit tests at https://nhibernate.jira.com/browse/NH-3058.

On Feb 10, 12:41 pm, Fabio Maulo <[email protected]> wrote:
> For sure.... lazy-fields is only a mere hope in .NET with no IL rewriter
> (ej. PostSharp).
> In NH it is implemented using DynamicProxy so it is not a truly
> field-interceptor but just a methods-interceptor (a property has 2 methods).
> In some circumstances the usage of lazy-properties may generate a proxy of
> a proxy of an instance; it should work in the mayor part of cases...
> If you have a failing test perhaps somebody may look at it to let you know
> if it represent a not supported scenario, a bug in your code or a bug in NH.
>
>
>
>
>
>
>
>
>
> On Thu, Feb 9, 2012 at 3:57 AM, pvginkel <[email protected]> wrote:
> > I don't have a reference to the session on my entity. Internally, it
> > redirects back to a static utility method that eventually gets a
> > session using the conversation model as described on
> >http://fabiomaulo.blogspot.com/2009/01/using-conversation-per-busines...
> > .
> > The problem here is that I pass the wrong entity to that static
> > method.
>
> > The reason I am posting this on nhdevs is that I believe this may not
> > be ideally implemented. I can think of a number of use cases that
> > break through this implementation. For example, if you have business
> > logic on your entities (DDD) and you use the this pointer of the
> > entity to perform further actions, you are always passing the wrong
> > entity because the interceptor redirects everything to the
> > TargetInstance. NHibernate really doesn't know of the TargetInstance
> > and only just knows of the info.Target. This to me looks like a
> > deficiency in the implementation of lazy fields.
>
> > If I am overlooking something and you don't agree that this is an
> > issue with the implementation, I'd be happy to look for help in other
> > places.
>
> > On Feb 8, 4:10 pm, Diego Mijelshon <[email protected]> wrote:
> > > Well, not having a session reference in your entities would be a good
> > start.
> > > If you like that kind of pattern, I recommend you use Castle ActiveRecord
> > > instead of implementing it yourself.
>
> > > On a different note, this list is only for development OF NHibernate. Try
> > > nhusers (or StackOverflow) for usage questions.
>
> > >     Diego
>
> > > On Wed, Feb 8, 2012 at 06:09, pvginkel <[email protected]> wrote:
> > > > I have a virtual method on my Entity base class which calls
> > > > session.SaveOrUpdate. When the entity has lazy fields, the
> > > > DefaultDynamicLazyFieldInterceptor calls the virtual method with the
> > > > TargetInstance and not the info.Target. This means that SaveOrUpdate
> > > > fails with a NonUniqueObjectException because I'm not passing the
> > > > proxy to SaveOrUpdate.
>
> > > > Is this behavior correct? If so, is there a way around this?
>
> --
> Fabio Maulo

Reply via email to