This is not for avoiding lazy loading. This is to allow lazy loading with the correct polymorphic type
On Mon, Jan 25, 2010 at 12:11 AM, Fabio Maulo <[email protected]> wrote: > I'm sorry I don't understand... > We should have lazy="no-proxy" available for this scope. > > 2010/1/24 Ayende Rahien <[email protected]> > > Okay, >> I just committed initial support for this. >> Given the following mapping: >> <class name="Order" table="Orders"> >> <id name="Id"> >> <generator class="assigned" /> >> </id> >> <many-to-one name="Payment" *force-load-on-property-access="true"*/> >> </class> >> >> >> <class name="Payment" abstract="true"> >> <id name="Id"> >> <generator class="assigned" /> >> </id> >> <discriminator column="Type" type="System.String"/> >> <subclass name="WireTransfer" discriminator-value="WT"> >> </subclass> >> <subclass name="CreditCard" discriminator-value="CC"> >> >> </subclass> >> >> </class> >> >> The following test will pass: >> >> [Test] >> public void CanGetActualValueFromLazyManyToOne() >> { >> using (ISession s = OpenSession()) >> { >> var order = s.Get<Order>(1); >> >> Assert.IsTrue(order.Payment is WireTransfer); >> } >> } >> >> There is one problem, though, and that is the identity map. >> >> public void GhostPropertyMaintainIdentityMap() >> { >> using (ISession s = OpenSession()) >> { >> var order = s.Get<Order>(1); >> >> Assert.AreSame(order.Payment, s.Load<Payment>(1)); >> } >> } >> >> This seems to all works. >> >> Thoughts? >> >> BTW, I really don't like the force-load-on-property-access, how about call >> it ghost="false" ? >> >> On Thu, Dec 31, 2009 at 11:32 AM, Ayende Rahien <[email protected]>wrote: >> >>> I am trying to figure out if we can support the following: >>> >>> class Comment >>> { >>> public virtual Post Post {get;set;} >>> } >>> >>> class Post {} >>> class Article : Post {} >>> >>> And *not* generate a PostProxy for the property, but instead detect the >>> property access, force a load to return the correct type. >>> We can do it right now by specifying lazy=false, but that pre-load the >>> entity, while I would like to try to get it to load only on access time. >>> >>> There are several potential problems with this: >>> a) we need to replace the reference on first access, which means that the >>> _parent_ must be a proxy as well. >>> b) we disallow field access entirely. >>> c) identity map issues? >>> >>> other thoughts? >>> >> >> > > > -- > Fabio Maulo > >
