在NHibernate中映射多接口继承的类

时间:2010-08-11 12:09:15

标签: nhibernate mapping

我有界面:

public interface IHasList<T>
{
    IList<T> Items { get; set; }
}

我想使用一对多映射将这样的类映射到列表:

public class Model : IHasList<A>, IHasList<B>
{
    ...
}

我可以这样做吗?如果是,如何编写映射?

1 个答案:

答案 0 :(得分:0)

这是可能的,但有点奇怪。

首先,为了在C#中声明这一点,Model看起来像这样:

public class Model : IHasList<A>, IHasList<B>
{
    IList<A> IHasList<A>.Items { get; set; }
    IList<B> IHasList<B>.Items { get; set; }
}

所以你需要让NHibernate理解:

<bag name="IHasList&lt;A&gt;.Items" table="ModelItemA">
  <key />
  <one-to-many class="A" />
</bag>
<bag name="IHasList&lt;B&gt;.Items" table="ModelItemB">
  <key />
  <one-to-many class="A" />
</bag>

(我假设A和B是具有常规一对多关系的映射实体,将其更改为多对多或元素并根据需要添加级联/反向属性)

它非常干净,实际上是通过XML转义引入的。您还必须使用类的全名。

相关问题