NHiberate が SaveOrUpdate と Merge のカスケードを許可するが Delete のカスケードを許可しないように、規則を構成したいと考えています。Cascade.SaveOrUpdate() または Cascade.Merge() が void を返しているため、これを行う方法が見つかりません。そして、1 つのメソッドを呼び出すと、前例がキャンセルされます。
ここに私の試練があります:
1) カスケードは SaveUpdate 用になります:
public class CascadeAllConvention : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public void Apply(IOneToOneInstance instance)
{
instance.Cascade.Merge();
instance.Cascade.SaveUpdate();
}
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Cascade.Merge();
instance.Cascade.SaveUpdate();
}
public void Apply(IManyToOneInstance instance)
{
instance.Cascade.Merge();
instance.Cascade.SaveUpdate();
}
}
2) カスケードは Merge 用になります。
public class CascadeAllConvention : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public void Apply(IOneToOneInstance instance)
{
instance.Cascade.SaveUpdate();
instance.Cascade.Merge();
}
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Cascade.SaveUpdate();
instance.Cascade.Merge();
}
public void Apply(IManyToOneInstance instance)
{
instance.Cascade.SaveUpdate();
instance.Cascade.Merge();
}
}
3) カスケードが無効になります。
public class CascadeAllConvention : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public void Apply(IOneToOneInstance instance)
{
instance.Cascade.All();
instance.Cascade.Not.Delete();
}
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Cascade.All();
instance.Cascade.Not.Delete();
}
public void Apply(IManyToOneInstance instance)
{
instance.Cascade.All();
instance.Cascade.Not.Delete();
}
}