2010-08-11 127 views
0

我有接口:映射多接口继承类NHibernate的

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

而且我想用一个一对多映射到表映射这样的类:

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

灿我这样做?如果是,如何编写映射?

+0

为什么这与其他任何映射不同? – Paco 2010-08-11 14:42:26

回答

0

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

首先,为了在C#中声明这一点,模式是这样的:

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转义导致。你还必须为类使用全名。