gpt4 book ai didi

NHibernate 实体和多重关联

转载 作者:行者123 更新时间:2023-12-04 02:06:48 26 4
gpt4 key购买 nike

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

特别是使用 FluentNHibernate,您将如何为一些被许多其他表引用的表创建实体?

例如 Employee 实体。 Employees 通常几乎无处不在,对于某些程序来说,让他们的 Employees 包含多个 Roles、多个 Tasks 或多个好处是有意义的。现在我想象它是这样的:

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 的设计是否使我必须引用对我的对象具有外键约束的每个对象?

最佳答案

员工不必知道每个 fk 对自己的引用。只为您实际需要通过员工引用的那些人这样做。

in a relationship where both sides are mapped, NHibernate needs you to set both sides before it will save correctly.

这只是意味着如果您映射两侧,那么您需要显式设置两侧的属性,如

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

关于NHibernate 实体和多重关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com