2010-05-20 12 views
1

我不喜歡代理和延遲加載的想法。我不需要那個。我想要純粹的POCO。我想在需要時明確控制加載關聯。在NHibernate中不加載沒有代理的關聯

這裏是實體

public class Post 
{ 
public long Id { get; set; } 
public long OwnerId { get; set; } 
public string Content { get; set; } 

public User Owner { get; set; } 
} 

和映射

<class name="Post"> 
    <id name="Id" /> 
    <property name="OwnerId" /> 
    <property name="Content" /> 
    <many-to-one name="Owner" column="OwnerId" /> 
</class> 

但是,如果我指定爲lazy =在映射 「假」,主人總是預先抓取。 我無法刪除多到一的映射,因爲這也明確關閉裝載或類似

from x in session.Query<Post>() 
where x.Owner.Title == "hello" 
select x; 

查詢我指定爲lazy =「true」,並設置use_proxy_validator屬性設置爲false。但是,這也渴望加載所有者。

有什麼辦法只加載郵政實體?

回答

0

User設置爲lazy = false上映射

<class name="User" table="Users" lazy="false"> 
+0

沒有效果。仍然渴望加載所有者。 – Alice 2010-05-21 01:59:40

0

刪除此屬性<property name="OwnerId" /> ......讓主人ID可以使用Owner.Id。這不會觸發延遲加載。只有當你擊中身份證以外的任何財產時,所有者纔會被加載。爲了使它成爲一個簡單/簡單的POCO,您可以使用投影和ResultTransformers。

Davy Brion - Must Everything be Virtual with NHibernate

+0

如果我不使每個成員都是虛擬的,則無論映射中的延遲加載設置如何,所有關聯都將被加載。我想只加載郵政實體而不設置我的會員虛擬。 – Alice 2010-05-21 02:13:32

相關問題