我正在映射的数据库包含计划实体。每个计划实体都有一个主要部门(多对一关系)和一组可能的附加部门(多对多关系)。部门存储在只有“ID”和“NAME”列的查找表中。'PLAN' 表有一个 'DEPARTMENT_ID' 外键列,它存储来自 'DEPARTMENT' 表的 id 以引用主要部门。计划与其他部门之间的关系存储在具有以下列的交叉引用表中:“PLAN_ID”和“DEPARTMENT_ID”。
现在,我已经使用 Plan 类和 Department 类成功地映射了这个结构:
public class Plan
{
public virtual int Id { get; set; }
public virtual Department ExecutorDepartment { get; set; }
public virtual IList<Department> AdditionalExecutorDepartments { get; set; }
}
public class Department
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
<class name="Plan" table="PLAN">
<id name="Id" unsaved-value="0">
<column name="ID" not-null="true" />
<generator class="native"/>
</id>
<many-to-one name="ExecutorDepartment" class="Department" column="DEPARTMENT_ID"/>
<bag name="AdditionalExecutorDepartments" table="PLAN_DEPARTMENT">
<key column="PLAN_ID" />
<many-to-many class="Department" column="DEPARTMENT_ID"></many-to-many>
</bag>
</class>
<class name="Department" table="DEPARTMENT">
<id name="Id" unsaved-value="0">
<column name="ID" not-null="true" />
<generator class="native"/>
</id>
<property name="Name" column="NAME" type="string"/>
</class>
但是,我正在寻找一种方法来删除 Department 类(就应用程序逻辑而言,这完全没用),并让 Plan 类将部门名称存储为字符串,如下所示:
public class Plan
{
public virtual int Id { get; set; }
public virtual string ExecutorDepartment { get; set; }
public virtual IList<string> AdditionalExecutorDepartments { get; set; }
}
有什么办法吗?顺便提一下,我不会更新数据库中的数据,也无法更改数据库结构。
PS我尝试使用该<Join>
元素来获取主要部门,但显然它只能加入主键(参见https://nhibernate.jira.com/browse/NH-1452)。