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