NHibernate: сопоставить две коллекции за одним столом? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь создать родительский объект (Policy) с двумя коллекциями дочерних объектов (ExpressionRules и ThresholdRules), в которых типы дочерних объектов совпадают и существуют в одной и той же таблице. Например:

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-сопоставления, если это возможно.)

1 Ответ

1 голос
/ 07 марта 2012

Похоже, что вам нужен только один набор детей, а для детей вам нужен базовый класс (называемый 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; }
}
...