C# 映射NHibernate多对多

C# 映射NHibernate多对多,c#,.net,nhibernate,nhibernate-mapping,C#,.net,Nhibernate,Nhibernate Mapping,我试图在这里映射一个遗留数据库,但遇到了一个问题。在我的模式中,我有一个模块的概念和一个变量的概念。每个模块由一个或多个变量组成,每个变量都具有特定于该模块的属性。一个变量坐在一个关系上 基于下面的类,映射ModuleVariable的最佳方法是什么?在我看来,它与特殊属性类似于多对多关系 以下是课程: public class Relation { public virtual string RelationId { get; set;

我试图在这里映射一个遗留数据库,但遇到了一个问题。在我的模式中,我有一个模块的概念和一个变量的概念。每个模块由一个或多个变量组成,每个变量都具有特定于该模块的属性。一个变量坐在一个关系上

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

要使多对多关系具有这种关系上的额外属性,必须将
ModuleVariable
设置为域实体,并将其与
Module
Variable
分别映射

Module
Variable
将有一个
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" />

多对多只在表上工作,没有额外的属性。 这是因为多对多表示其他实体内部的项集合

如果您的表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>
为了便于使用,您应该添加以下模块:

variable.Modules.Add(module);

希望能有所帮助。

如果您还发布了一个示例架构,您会得到更好的帮助。
variable.Modules.Add(module);