다음과 같은 모델이 있습니다.가상 클래스가 아닌 속성 및 메서드를 사용하여 시스템 클래스에서 파생 된 엔터티 클래스를 작성하고 매핑하는 방법은 무엇입니까?
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에서는 중요하지 않습니다. 따라서이 클래스의 모든 인스턴스는 데이터베이스의 한 행이지만 소프트웨어의 다른 부분에 의해 초기화되는 다른 DataValue를 포함 할 수 있습니다. 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
물론 이것은 사실로 인해 발생하는 수집 방법과 다음 던졌습니다, 지금이 (유창함) 같은
public DataValueMap()
{
Id(x => x.Id);
Map(x => x.Value);
}
를 매핑 속성은 가상이 아닙니다. 이 문제를 어떻게 해결해야합니까?
- DataValue는 지연로드가 가능해야 LazyLoad를 비활성화 할 수 없습니다.
- IList를 구현할 수 있고 Collection을 상속하지 않지만 클래스를 복잡하게 만들고 Collection을 상속하는 것이 제 의견입니다.
나는이 대답에서 설명한 David처럼 구현을 마쳤습니다. Firo의 접근법은 어떤 경우에는 가능할 수도 있습니다. IList를 구현하고 Collection 유형의 개인 속성을가집니다. –