如何关闭级联删除?

时间:2012-06-16 01:07:19

标签: nhibernate fluent-nhibernate nhibernate-mapping s#arp-architecture fluent-nhibernate-mapping

我上课时参考:

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()应该有效,大多数人都有相反的问题,删除/更新/ ...不起作用,所以我真的很困惑。

1 个答案:

答案 0 :(得分:2)

问题是,我在实例HasManyConvention.Apply中设置的另一个地方(在Cascade.AllDeleteOrphan()中)并且它具有更高的优先级。

PS:我不知道是不是类似的帖子就像回答od删除了。对我来说,这看起来像是一个问题,我有更多的时间在过去,但它是“我不知道我自己的代码......”的变化。