【问题标题】:Mapping for multi-interface-inherited class in NHibernateNHibernate 中多接口继承类的映射
【发布时间】:2010-08-11 22:58:22
【问题描述】:

我有接口:

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

我想使用一对多映射将此类映射到列表:

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

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

【问题讨论】:

  • 为什么这与您的任何其他映射不同?

标签: nhibernate mapping


【解决方案1】:

有可能,但有点奇怪。

首先,为了在 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 转义引入的。您还必须使用类的全名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多