Oh, okay.
I am actually _am_ using proxies there (to register into the identity map).


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

Reply via email to