我在 NHibernate 中有一个场景,其中实体 Employee 和 EmployeeStatus 之间存在一对多的关系。
Employee 具有属性,例如:ID、Name 和 EmployeeStatus 的 IList,而 EmployeeStatus 就这个问题而言,只有它自己的 ID 和一些自由文本。
我不需要从 EmployeeStatus 中保存对 Employee 的引用,状态的管理将完全通过 Employee 实体完成 - 添加到 IList 属性。IE:我想很简单地做到以下几点;
Employee e = new Employee();
e.Name = "Tony";
e.StatusList.Add( new EmployeeStatus("Status A") );
e.StatusList.Add( new EmployeeStatus("Status B") );
session.Save(e);
我尝试了各种方法,包括创建一个单向一对多映射,其中 inverse 为假,级联设置为 all-delete-orphan,这一切看起来都应该工作,但它会生成一个关于无法设置的异常EmployeeStatus 中的 EmployeeId。我被引导相信这是因为 NHibernate 想要使用 EmployeeId 作为 NULL 进行插入,然后将其更新为父级的 ID。
我想我在这里遗漏了一些东西,所以很简单 - 谁能告诉我我的映射文件应该是什么样子才能实现上述目标?
提前致谢
托尼
-- 编辑:这是所要求的类的粗略概念 --
public class Employee
{
private IList<EmployeeStatus> _statusList;
public Employee()
{
_statusList = new List<EmployeeStatus>();
}
public virtual int Id{ get; set; }
public virtual string Name{ get; set; }
public virtual IList<EmployeeStatus> StatusList
{
get
{
return _statusList;
}
}
}
public class EmployeeStatus
{
public virtual int Id{ get; set; }
public virtual string StatusText{ get; set; }
public EmployeeStatus()
{
}
public EmployeeStatus(string statusText)
{
StatusText = statusText;
}
}