映射NHibernate多对多

时间:2009-05-18 14:04:37

标签: c# .net nhibernate nhibernate-mapping

我正在尝试在此处映射旧数据库,但我遇到了问题。在我的架构中,我有一个模块概念和一个变量概念。每个模块由一个或多个变量组成,每个变量都具有特定于该模块的属性。一个Varable坐在一个关系上。

基于下面的类,映射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;
    }
}

2 个答案:

答案 0 :(得分:2)

要在这种关系上与额外属性建立多对多关系,您必须将ModuleVariable作为域实体,并将其与Module和{{1}分开映射}。

VariableModule将拥有Variable个实体的集合,ModuleVariable将对其他两个实体进行多对一的引用。类似的东西:

ModuleVariable

答案 1 :(得分: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);

希望能提供帮助。