У меня есть следующая модель.
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
Это, конечно, связано с тем, что методы и свойства Collection не являются виртуальными. Как мне решить эту проблему?
- DataValue должен загружаться с отложенной загрузкой, поэтому отключение LazyLoad не вариант.
- Я мог бы реализовать IList и не наследовать Collection, но это могло бы загромождать класс и наследовать Collection, по моему мнению, чище.