2009-05-18 159 views
0

我想映射一個遺留數據庫在這裏,我遇到了一個問題。在我的模式中,我有一個模塊的概念和變量的概念。每個模塊由一個或多個變量組成,每個變量都具有特定於該模塊的屬性。一個可變的坐在一個關係。映射NHibernate多對多

根據下面的類映射ModuleVariable的最佳方式是什麼,對於我來說,看起來就像是一個具有特殊屬性的多對多關係。

這裏是類:

public class Relation 
{ 
    public virtual string RelationId 
    { 
     get; 
     set; 
    } 
} 

public class Variable 
{ 
    public virtual string VariableId 
    { 
     get; 
     set; 
    } 

    public virtual Relation RelationId 
    { 
     get; 
     set; 
    } 
} 

public class Module 
{ 
    public virtual string ModuleId 
    { 
     get; 
     set; 
    } 
} 

public class ModuleVariable 
{  
    public virtual Module ModuleId 
    { 
     get; 
     set; 
    } 

    public virtual Variable VariableId 
    { 
     get; 
     set; 
    } 

    public virtual Relation RelationId 
    { 
     get; 
     set; 
    } 

    public virtual Variable DownloadID 
    { 
     get; 
     set; 
    } 

    public virtual Variable UploadID 
    { 
     get; 
     set; 
    } 

    public string Repeatable 
    { 
     get; 
     set; 
    } 
} 
+0

如果您還發布了示例模式,您將獲得更好的幫助。 – Min 2009-05-18 14:07:26

回答

2

要與像的關係帶來額外的性能的許多一對多的關係,你將不得不作出ModuleVariable域實體和Module分別映射它和Variable

ModuleVariable將具有ModuleVariable實體的集合,並且ModuleVariable將具有對其他兩個的多對一引用。例如:

<!-- Module mapping --> 
<bag name="ModuleVariables" inverse="true"> 
    <key column="Module_id" /> 
    <one-to-many class="ModuleVariable" /> 
</bag> 

<!-- ModuleVariable mapping --> 
<many-to-one name="Module" column="Module_id" /> 
0

多對多隻能在桌面上工作,沒有額外的屬性。 這是因爲多對多表示其他實體內部的項目集合。

如果您的表ModuleVariable沒有其他列,你可以使用這樣的:

<bag name="Modules" table="MODULE_VARIABLE" cascade="save-update" lazy="true" > 
    <key> 
    <column name="Variable_Id" not-null="true"/> 
    </key> 
    <many-to-many class="Module"> 
    <column name="Module_Id" not-null="true"/> 
    </many-to-many> 
</bag> 

而在你的領域類:

public IList Modules { get; set; } 

及使用,您應該添加模塊:

variable.Modules.Add(module); 

希望有所幫助。