我上课时参考:
public class Employee : Entity
{
private string _Name;
private string _Position;
private Employee _SupervisorBackRef;
private IList<Employee> _Subordinates;
private IList<BusinessPartner> _BusinessPartners;
public virtual string Name
{
get { return _Name; }
set { _Name = value; }
}
public virtual string Position
{
get { return _Position; }
set { _Position = value; }
}
public virtual Employee SupervisorBackRef
{
get { return _SupervisorBackRef; }
set { _SupervisorBackRef = value; }
}
public virtual IList<Employee> Subordinates
{
get { return _Subordinates; }
set { _Subordinates = value; }
}
public virtual IList<BusinessPartner> BusinessPartners
{
get { return _BusinessPartners; }
set { _BusinessPartners = value; }
}
}
因为后引用SupervisorBackRef和Subordinates共享相同的外键:
create table Employees (
Id INT not null,
Name NVARCHAR(255) null,
Position NVARCHAR(255) null,
EmployeeFk INT null,
primary key (Id)
)
问题是虽然我尝试覆盖它,但如果我删除任何主管,它会删除所有下属。我试过这个:
class EmployeeOverride : IAutoMappingOverride<Employee>
{
public void Override(FluentNHibernate.Automapping.AutoMapping<Employee> mapping)
{
mapping.HasMany(x => x.Subordinates).Cascade.None();
mapping.HasOne(x => x.SupervisorBackRef).Cascade.None();
}
}
但这不起作用。我尝试将其更改为不同的另一种组合,我尝试了这种覆盖删除,但没有任何帮助。
如果我删除任何员工,它会删除所有下属。
我不知道如何识别此覆盖功能是否有效。
从互联网上的许多文本中我了解Cascade.None()应该有效,大多数人都有相反的问题,删除/更新/ ...不起作用,所以我真的很困惑。
答案 0 :(得分:2)
问题是,我在实例HasManyConvention.Apply
中设置的另一个地方(在Cascade.AllDeleteOrphan()
中)并且它具有更高的优先级。