NHibernate实体和多个关联
问题描述:
我不知道如何恰当地提出问题,所以提前抱歉。NHibernate实体和多个关联
特别是使用FluentNHibernate,你将如何去做一些被许多其他表引用的表的实体?
例如员工实体。员工通常几乎在任何地方都可以使用,一些程序让他们的员工包含多个角色,多个任务或多个好处是有意义的。现在,我想象它是这样的:
public class Employee
{
public virtual Employee()
{
Tasks = new List<Task>();
Roles = new List<Role>();
Benefits = new List<Benefit>();
}
public virtual Id { get; set; }
public virtual Name { get; set; }
public virtual IList<Task> Tasks { get; protected set; }
public virtual IList<Role> Roles { get; protected set; }
public virtual IList<Benefit> Benefits { get; protected set; }
public virtual void AddTask(Task task)
{
task.Employee = this;
Tasks.Add(task);
}
public virtual void AddBenefit(Benefit benefit)
{
benefit.Employee = this;
Benefits.Add(benefit);
}
public virtual void AddBenefit(Benefit benefit)
{
benefit.Employee = this;
Benefits.Add(benefit);
}
}
public class EmployeeMapper : ClassMap<Employee>
{
public EmployeeMapper()
{
id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Tasks);
HasMany(x => x.Roles);
HasMany(x => x.Benefits);
}
}
现在whiel在这个例子中有仅3个集,还有就是它会成长,并与员工尽一切联想成长的可能性。就像在一个人力资源系统中一样,它将与薪资,地址,税收,扣除等所有内容相关联。如果我为每一个我称之为小型参考的人创建一个集合,它会不会太夸张?
有没有一种模式来避免这种情况来临或是NHibernate的设计,以便我必须引用每个对象都有一个外键约束我的对象?
答
员工不必知道每个fk对自己的引用。只为那些你实际需要通过员工参考的人做。
在双方都 映射关系,NHibernate的需要你设置 双方前,将正确保存 。
这只是意味着IF你映射双方,则需要双方明确设置的属性,如
parent.children.Add(child);
child.parent = parent;
+0
如果你正在使用级联,这仍然是真的吗?在我看来,另一方会自动更新 – Shagglez 2011-07-22 09:35:19
雇员不必知道所有的FK引用到自身。只为那些你实际需要通过员工参考的人做。 – dotjoe 2010-08-10 14:26:04
所以这是否意味着维基说:“在双方都被映射的关系中,NHibernate需要你在双方都能正确保存之前设置双方。”,“双方都映射”意味着双方都有一个引用其他?从我最初从该声明中理解的内容来看,我认为这必须在双方都被映射到一个表格时完成。 – Jonn 2010-08-10 15:01:48
是的,这仅仅意味着** IF **你映射双方,那么你需要明确地设置两边的属性,如'parent.children.Add(child); child.parent =家长;' – dotjoe 2010-08-12 15:14:40