我正在尝试使用两个子实体集合(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。)
答案 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; }
}