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) 
    ) 

Проблема заключается в том, что, хотя я судимое заменить его, если удалить любой руководитель, его удалить всех его подчиненных. Я пробовал это:

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: Я не знаю, является ли столбец аналогичным, как ответ, удаленный. Для меня это похоже на проблему, в которой у меня было больше времени в прошлом, но это вариация «Я не знаю свой собственный код ...»

 Смежные вопросы

  • Нет связанных вопросов^_^