Not much when there is that level of hand holding :-)

On Mon, Jan 25, 2010 at 12:50 AM, Fabio Maulo <[email protected]> wrote:

> Ups!!! pretty quickly despite SVN
>
>
> 2010/1/24 Ayende Rahien <[email protected]>
>
>> Implemented & committed
>>
>>
>> On Mon, Jan 25, 2010 at 12:22 AM, Fabio Maulo <[email protected]>wrote:
>>
>>> Yes I know and for that reason is lazy="no-proxy".
>>> The many-to-one relationship has 3 possible lazy values :
>>> lazy="false" (this is to avoid lazy)
>>> lazy="proxy" (as we are working today)
>>> lazy="no-proxy" (the property will work as lazy-load but without the
>>> proxy)
>>>
>>> In the trunk we are "ignoring" the value no-proxy, interpreting it as
>>> lazy="false", but its behaviour should be exactly what you are
>>> implementing.
>>>
>>>
>>> 2010/1/24 Ayende Rahien <[email protected]>
>>>
>>>> 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
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Fabio Maulo
>>>
>>>
>>
>
>
> --
> Fabio Maulo
>
>

Reply via email to