我有以下模型。如何構建和映射派生自系統類的實體類與不是虛擬的屬性和方法?
public class DataValue : Collection<DataValue>
{
private List<DataValue> _values;
public virtual int Id { get; set; }
public virtual string Value { get; set; }
protected override void InsertItem(int index, DataValue item)
{
base.InsertItem(index, item);
this._values.Add(item._value);
}
}
模型繼承Collection類。這是我的領域模型所需要的,但它對NHibernate並不重要。因此,該類的每個實例都是數據庫中的一行,但它可以包含由軟件的其他部分初始化的其他DataValues。 我映射像這樣(流利)
public DataValueMap()
{
Id(x => x.Id);
Map(x => x.Value);
}
現在,當NHibernate的嘗試創建代理類,它拋出以下錯誤
NHibernate.InvalidProxyTypeException: NHibernate.InvalidProxyTypeException:
The following types may not be used as proxies:
DataValue: method get_Count should be 'public/protected virtual' or 'protected internal virtual'
DataValue: method get_Item should be 'public/protected virtual' or 'protected internal virtual'
DataValue: method set_Item should be 'public/protected virtual' or 'protected internal virtual'
DataValue: method Add should be 'public/protected virtual' or 'protected internal virtual'
etc... basically all the Collection methods and properties
當然,這是由以下事實引起的收集方法和屬性不是虛擬的。我應該如何解決這個問題?
- DataValue應該是可延遲加載的,因此禁用LazyLoad不是一個選項。
- 我可以實現IList並且不繼承Collection,但是會混亂這個類並繼承一個Collection,在我看來,這是更清潔的。
我最終像David在這個答案中描述的那樣實現它。 Firo的方法在某些情況下也是可行的。我實施了IList並擁有類型Collection的私人權限。 –