我不知道如何恰當地提出問題,所以提前抱歉。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引用到自身。只爲那些你實際需要通過員工參考的人做。 – 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