继承了流利的nhibenate映射问题

时间:2010-06-02 11:27:49

标签: c# fluent-nhibernate nhibernate-mapping

今天我有一个有趣的问题!!基本上我有两节课。

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(检查映射是否存在属性类型不匹配);安装者   ----&GT; System.InvalidCastException:无法转换类型为'NHibernate.Collection.Generic.PersistentGenericSet 1[Item]' to type 'Iesi.Collections.Generic.ISet 1 [DifferentItem]'的对象。

有人有什么想法吗?

显然,它与子类上的集合类型有关。但是我浏览了映射类中的可用选项,没有什么能在这里成为解决方案。

1 个答案:

答案 0 :(得分:1)

c#中的泛型不支持协方差,因此基本上您不能拥有ISet<Item>ISet<DifferentItem>。由于这是语言的限制,您需要重新考虑您的设计。或者等到#6。