我不知道如何正确地说出这个问题,所以提前抱歉。
特别是使用FluentNHibernate,你会如何为一些其他表引用的表创建实体?
例如Employee实体。员工通常在几乎所有地方都使用,一些程序让员工包含多个角色,多个任务或多个好处是有意义的。现在我想象它是这样的:
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 );
}
}
现在,在这个例子中,只有3个集合,它有可能随着与员工的每次关联而成长和成长。就像在人力资源系统中一样,它将与工资单,地址,税收,扣除等所有内容相关联。如果我为我称之为的每个小参考制作一个集合,它会不会太夸张?
是否有一种模式可以避免这种情况的发生,或者是NHibernate的设计,以便我必须引用每个对象都有一个外键约束?
答案 0 :(得分:2)
员工无需了解每个fk对自身的引用。只对那些您实际需要通过员工引用的人执行此操作。
双方的关系 映射,NHibernate需要你设置 双方在此之前将拯救 正确。
这只是意味着 IF 你映射了双方,那么你需要明确设置双方的属性,如
parent.children.Add(child);
child.parent = parent;