У меня есть класс с задней ссылкой:Как отключить каскадное удаление?
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() должен работать, у большинства людей есть противоположная проблема, удаление/обновление/... не работает, поэтому я действительно смущен.