NHibernate:将两个集合映射到一个表?

时间:2012-03-07 15:36:56

标签: nhibernate nhibernate-mapping

我正在尝试使用两个子实体集合(ExpressionRules和ThresholdRules)创建父实体(Policy),其中子实体的类型相同并存在于同一个表中。例如:

class Policy
{
    ICollection<Rule> ExpressionRules { get; set; }
    ICollection<Rule> ThresholdRules { get; set; }
}

class Rule
{
    public virtual int SequenceNumber { get; set; }
    public virtual ICondition Condition { get; set; }
}

interface ICondition
{
}

class ExpressionCondition : ICondition
{
    public virtual string Expression { get; set; }
}

class ThresholdCondition : ICondition
{
    public virtual int Threshold { get; set; }
}

在实践中,每组规则都会在其中包含不同的ICondition实现者。 ICondition映射具有鉴别器,根据该鉴别器加载正确的实现。但是这两组中的规则是相同的,我希望它们映射到同一个表。

这可能吗?

(如果你添加了映射示例,请尽可能使用xml-mappings。)

1 个答案:

答案 0 :(得分:1)

看起来你只想要一组孩子,而你需要有孩子,你需要有一个可以被歧视的基类(叫做GrandChild)。类似的东西:

class Parent
{
    ICollection<Child> Children { get; }
}

class Child
{
    public virtual bool SomeFlag { get; set; }
    public virtual GrandChild GrandChild { get; set; }
}

class GrandChild{}

class GrandChild1 : GrandChild
{
    public virtual string SomeProperty { get; set; }
}

class GrandChild2 : GrandChild
{
    public virtual int SomeOtherProperty { get; set; }
}