私は後方参照を持つクラスを持っています:
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() が機能するはずであることを理解しています。ほとんどの人は逆の問題を抱えており、削除/更新/... 機能しないため、本当に混乱しています。