NHibernate:没有共同基类的鉴别器?

时间:2012-03-07 18:39:18

标签: nhibernate nhibernate-mapping

是否可以将两个类映射到同一个属性而不共享一个公共基类?

例如,这样的情况:

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实现存在于不允许相互引用的不同域中。 (请不要回复告诉我这种情况不应该首先出现 - 我已经意识到这一点并且对我没有帮助。)

1 个答案:

答案 0 :(得分:3)

使用FluentNHibernate

ReferencesAny(x => x.Condition)
    .EntityIdentifierColumn("cond_Id")
    .EntityTypeColumn("condType")
    .IdentityType<int>()
    .AddMetaValue<ExpressionCondition>("express")
    .AddMetaValue<ThresholdCondition >("threshold");

使用xml

<any id-type="System.Int32" meta-type="System.String" name="Condition">
  <meta-value value="express" class="Namespace.ExpressionCondition" />
  <meta-value value="threshold" class="Namespace.ThresholdCondition" />
  <column name="condType" />
  <column name="cond_Id" />
</any>