У меня сегодня интересная проблема !! В основном у меня есть два класса.
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();
}
}
Однако, когда я запускаю свой модульный тест для проверки соответствия, я получаю следующее исключение:
Проверяет отображение A: NHibernate.PropertyAccessException: Invalid Cast (проверьте соответствие на предмет несоответствий типов свойств); сеттер А
----> System.InvalidCastException: не удалось привести объект типа 'NHibernate.Collection.Generic.PersistentGenericSet 1[Item]' to type 'Iesi.Collections.Generic.ISet
1 [DifferentItem]'.
У кого-нибудь есть идеи?
Очевидно, это связано с типом коллекции в подклассе. Но я пролистал доступные опции в классе отображения, и ничто не выделялось как решение здесь.