2012-06-19 36 views
1

我有一個自定義列表的類,它繼承自List並且無法獲得NHibernate映射的工作。如何使用NHibernate映射自定義列表

public class MyClass 
{ 
    private MyList<Foo> foos; 

    public virtual MyList<Foo> Foos 
    { 
     get { return foos; } 
     set { foos= value; } 
    } 
} 

<bag name="Foos" access="property" cascade="all-delete-orphan" batch-size="5"> 
     <key column="MyClassId"/> 
     <one-to-many class="Domain.Model.MyClass, Domain"/> 
</bag> 

我得到的例外

無法轉換類型的對象 'NHibernate.Collection.Generic.PersistentGenericBag 1[Domain.Model.Foo]' to type 'Domain.Model.MyList 1 [Domain.Model.Foo]'。

在此之後blog,我試圖包裹在一個組件包,

<component name="Foos" access="nosetter.camelcase-underscore"> 
    <bag name="Foos" access="property" cascade="all-delete-orphan" batch-size="5"> 
     <key column="MyClassId"/> 
     <one-to-many class="Domain.Model.MyClass, Domain"/> 
    </bag> 
</component> 

導致錯誤

找不到屬性爲getter 'FOOS' 類' Domain.Model.MyList`1 [Domain.Model.Foo]'

MyList只有一個方法來添加目標CTS。

public class MyList<T> : List<T> 
{ 
    public new void Add(T item) 
    { 
     //custom stuff 

     base.Add(item); 
    } 
} 
+0

,你能否告訴我們'MYLIST '定義是什麼? –

回答

0

這應該工作...

public class MyClass 
{ 
    public virtual IList<Foo> Foos { get; private set; } 

    public MyClass() 
    { 
     Foos = new MyList<Foo>(); 
    } 
} 

改變了映射屬性設置爲一個IList並將其設置爲MyList

0

如果MyList<T>是一個具體類型(如果我沒記錯的話)的NHibernate將類似於異常抱怨(或相同?)一個你獲得。

這可以通過使用IList<T>來解決。