NHibernate 不会删除一对多关系中的孤儿

时间:2021-05-26 20:28:43

标签: c# asp.net-core orm nhibernate

虽然删除和添加工作正常,但当我更新子实体的父集合时,子记录上的外键只是设置为空。我希望它们从数据库中完全删除。

所以我一直在尝试 Cascade.AllCascade.DeleteOrphansCascade.All.Include(Cascade.DeleteOrphans),但似乎没有任何效果。

如果我在父级上将 Inverse 设置为 true 但它会导致子记录根本没有更新。

这是我的代码:

父类映射

Id(e => e.Id, mapper => mapper.Generator(Generators.HighLow));
Property(e => e.Name);
Bag(e => e.Actors,
      mapper =>
      {
        mapper.Key(k => k.Column("Movie_Id"));
        mapper.Cascade(Cascade.All.Include(Cascade.DeleteOrphans));
      },
      relation => relation.OneToMany(
        mapping => mapping.Class(typeof(Actor))));

子映射

Id(e => e.Id, mapper => mapper.Generator(Generators.HighLow));
Property(e => e.FirstName);

父实体

    public class Movie : EntityBase
    {
        public virtual string Name { get; set; }
        public virtual IEnumerable<Actor> Actors { get; set; }
    }

更新方法


        public void Update(T entity)
        {
            using (var transaction = Session.BeginTransaction())
            {
                    try
                    {
                        Session.Update(entity)
                        transaction.Commit();
                    }
                    catch
                    {
                        transaction.Rollback();
                        throw;
                    } 
            }      
        }

1 个答案:

答案 0 :(得分:0)

将 Update() 更改为 Merge() 对我有用。

相关问题