我在团队和员工实体之间有多对多的关系。
我将它们映射如下:
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
// identifier mapping
Id(p => p.Id).Column("EmployeeID");
// column mapping
Map(p => p.EMail);
Map(p => p.LastName);
Map(p => p.FirstName);
// relationship mapping
HasManyToMany(m => m.Teams).Table("EmployeeTeam")
.Inverse()
.Cascade.All()
.AsSet()
.LazyLoad()
.ParentKeyColumn("EmployeeID")
.ChildKeyColumn("TeamID");
HasMany(p => p.LoanedItems).Cascade.SaveUpdate().KeyColumn("EmployeeId");
}
}
public class TeamMap : ClassMap<Team>
{
public TeamMap()
{
// identity mapping
Id(p => p.Id).Column("TeamID");
// column mapping
Map(p => p.Name);
// relationship mapping
HasManyToMany(m => m.Employees)
.Table("EmployeeTeam")
.LazyLoad()
.Cascade.All()
.AsSet()
.ParentKeyColumn("TeamID")
.ChildKeyColumn("EmployeeID");
}
}
然后我创建了 3 个团队和 2 个员工:
TeamID EmployeeID
1 1
1 2
2 2
3 1
Employee1 还有 2 个 LoanedItems(书籍、杂志)。Employee2 没有 LoanedItems。
现在我想删除 Team1 和 Team3 中的 Employee1。在 Team 1 中也是 Employee2。因此,当我删除 Employee1 时,我假设 Employee1 和 Team3 也被删除,因为我还假设一个 Team 只有在有 Employe 时才能存在,反之亦然。所以Team1可能不会被删除,因为它有Employee2并且可以仍然存在。
我在新会话中使用了以下代码行:
var loadedEmployee = session.Get<Employee>(1);
session.Delete(loadedEmployee);
transaction.Commit();
但是会发生什么?-> NHibernate 删除所有团队和所有员工!-> NHibernate 通过将 FK EmployeeID 设置为 NULL 正确更新了我的 LoanedItem 表。
那里有什么问题?