我正在尝试在此处映射旧数据库,但我遇到了问题。在我的架构中,我有一个模块概念和一个变量概念。每个模块由一个或多个变量组成,每个变量都具有特定于该模块的属性。一个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;
}
}
答案 0 :(得分:2)
要在这种关系上与额外属性建立多对多关系,您必须将ModuleVariable
作为域实体,并将其与Module
和{{1}分开映射}。
Variable
和Module
将拥有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);
希望能提供帮助。