0

我有回参考类:如何关闭级联删除?

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和下属分享相同的外键:

create table Employees (
     Id INT not null, 
     Name NVARCHAR(255) null, 
     Position NVARCHAR(255) null, 
     EmployeeFk INT null, 
     primary key (Id) 
    ) 

问题是,虽然我tryed覆盖它,如果我删除任何主管,它删除他所有的下属。我试过这个:

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()应该工作,大多数人有相反的问题,删除/更新/ ...不工作,所以我很困惑。

回答

2

问题是,我在另一个地方(在HasManyConvention.Apply)在实例Cascade.AllDeleteOrphan()中设置,它是更高的优先级。

PS:我不知道是否是类似的帖子,回答od删除。对我来说,这看起来像是我过去有更多时间的问题,但它是“我不知道我自己的代码......”的变体......