2012-03-07 12 views
1

2つのクラスを共通の基本クラスを共有しないで同じプロパティにマップすることはできますか?例えばNHibernate:共通基底クラスのないdiscriminator?

、このような状況:

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; } 
} 

Iはまた、両方の条件が2つのICondition実装がお互いを参照するために許可されていない別のドメインに存在するため、継承いくつかの空の抽象クラスを追加することはできません。 (この状況は最初の場所で発生してはならないことを私に言っていない回答してください - 私はそれを意識することだし、それは私を助けていません。)

答えて

2

はXML

を使用してFluentNHibernate

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

を使用して

<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> 
+0

これはxmlでどのように表現されるのかわかりません。私は流暢なnhibernateに精通していない。 – joniba

関連する問題