NHibernate实体和多个关联

时间:2010-08-10 14:20:33

标签: nhibernate entity

我不知道如何正确地说出这个问题,所以提前抱歉。

特别是使用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的设计,以便我必须引用每个对象都有一个外键约束?

1 个答案:

答案 0 :(得分:2)

员工无需了解每个fk对自身的引用。只对那些您实际需要通过员工引用的人执行此操作。

  

双方的关系   映射,NHibernate需要你设置   双方在此之前将拯救   正确。

这只是意味着 IF 你映射了双方,那么你需要明确设置双方的属性,如

parent.children.Add(child); 
child.parent = parent;