NHibernate: дискриминатор без общего базового класса? - PullRequest
2 голосов
/ 07 марта 2012

Можно ли сопоставить два класса одному и тому же свойству без общего общего базового класса?

Например, такая ситуация:

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 Ответ

3 голосов
/ 08 марта 2012

с использованием 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>
...