2

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();
        }
    }
4

0 に答える 0