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