오늘 흥미로운 문제가 있습니다 !! 기본적으로 두 클래스가 있습니다.유창한 nhibenate 매핑 문제
public class A : B
{
public virtual new ISet<DifferentItem> Items {get;set;}
}
public class B
{
public virtual int Id {get;set;}
public virtual ISet<Item> Items {get;set;}
}
하위 클래스 A는 기본 클래스 B 속성 인 Items를 숨기고 동일한 이름과 다른 유형의 새 속성으로 바꿉니다. 이러한 클래스에 대한
매핑이
public class AMapping : SubclassMap<A>
{
public AMapping()
{
HasMany(x=>x.Items)
.LazyLoad()
.AsSet();
}
}
public class BMapping : ClassMap<B>
{
public BMapping()
{
Id(x=>x.Id);
HasMany(x=>x.Items)
.LazyLoad()
.AsSet();
}
}
있습니다 그러나 나는 다음과 같은 예외가 얻을지도 확인하기 위해 내 단위 테스트를 실행하면
이 매핑을 테스트 : NHibernate.PropertyAccessException : 잘못된 주조 (속성 유형 불일치에 대한 매핑 확인); setter of A ----> System.InvalidCastException : 형식이 'NHibernate.Collection.Generic.PersistentGenericSet 1[Item]' to type 'Iesi.Collections.Generic.ISet
1 [DifferentItem]'유형의 개체를 캐스팅 할 수 없습니다.
누구든지 아이디어가 있습니까?
분명히 하위 클래스의 컬렉션 유형과 관련이 있습니다. 그러나 매핑 클래스에서 사용할 수있는 옵션을 살펴 보았습니다. 여기서는 해결책이 아닌 것으로 눈에 띄지 않았습니다.
매핑을 확인하기 위해 PersistenceSpecification을 사용하고 있습니다. –
Skeets C#의 p103을 깊이 읽은 후에 "공분산 및 반항성의 부족"과 관련이있는 것 같습니다. –