2011-08-11 20 views
0

我有課,讓它成爲富:如何手動NHibernate的創建代理的詳細信息收集

public class Foo 
{ 
    ... 

    protected MyCollection<Detail> _details 
    public virtual MyCollection<Detail> Details 
    { 
    get { return _details ?? new MyCollection<Details>(); } 
    set { _details = value; ... } 
    } 
    ... 
} 

public class Detail {...} 

當我做LINQ查詢:

var q = session.Query<Foo>().Select(foo => new Foo(property1 = foo.property1, ...); 
... 
q.ToList(); 

我有NULL in _details field,當我訪問細節得到所有懶惰細節,當然我得到new MyCollection(),但不是IPersistentBag(或其他IPersistentCollection)。

那麼我如何手動創建代理集合(我有session/sessionFactory引用)?

[新增]這裏是映射(上美孚):

<bag name="Details" lazy="true" collection-type="NHibernateDataService.DetailBag`1[[DataObjects.Detail, DataObjects]], NHibernateDataService" cascade="all-delete-orphan" fetch="select" batch-size="1" access="property" inverse="true"> 
    <key column="`Master`" /> 
    <one-to-many class="DataObjects.Detail" /> 
</bag> 

謝謝!

+0

你可以發佈你的映射嗎? – Vasea

+0

什麼不使用_details的字段初始值設定項?如果您將項目添加到新的Foo,_details將保持爲空。 – Vasea

+0

因爲我們的業務邏輯 - 我們通過Wcf wire始終移動對象,從服務器2客戶端和後端,我們不想關心他們=) – EvgeniyK

回答

0

MyCollection的不能被映射到IPersistentBag,除非,當然,你落實MyCollection的該接口(和可能設置映射類型明確??)...

更標準的做法是設置映射到自定義類型的包上的「collection-type」屬性 - IUserCollectionType的實現,您可以選擇該實現來創建MyCollection派生自的基類。

+0

我錯了 Yeap,你說得對,它實現了IUserCollectionType ; – EvgeniyK