【问题标题】:nhibernate use_identifier_rollback all-delete-orphannhibernate use_identifier_rollback all-delete-orphan
【发布时间】:2013-08-30 10:11:46
【问题描述】:

在 NH 中是一个配置设置“use_identifier_rollback”,它将实体的 id 设置回其默认值。

此设置适用于除“delete-orphan”之外的所有级联选项。 (我知道为什么!)

看看C# Identifier Rollback

看看Java Identifier Rollback

// Works with 'use_identifier_rollback' and 'cascade-option=all' 
// but not with 'cascade-option=all-delete-orphan'
Sample sample = new Sample("sample");
sample.Add(new Subsample("subsample");
int sampleId;
using(var session = sessionFactoy.OpenSession())
{
  using(var tx = session.BeginTransaction())
  {
       session.Save(sample);
       sampleId = sample.Id;
       Assert.That(sampleId, Is.GreaterThan(0));
       Assert.False(sample.IsTransient)
  } // Rollback
}
Assert.That(sample.Id, Is.EqualTo(0));
Assert.True(sample.IsTransient)

回滚保存时恢复 id 是不好的做法吗? 在java代码中没有注释掉并且可以工作。

更新: 删除实体时,您通常期望什么行为?

// Works with 'use_identifier_rollback' and 'cascade-option=all' 
// but not with 'cascade-option=all-delete-orphan'
int sampleId; // sampleId from above
using(var session = sessionFactoy.OpenSession())
{
  using(var tx = session.BeginTransaction())
  {
       Sample sample = session.Get<Sample>(sampleId);
       Assert.That(sampleId, Is.GreaterThan(0));
       Assert.False(sample.IsTransient)
       session.Delete(sample);
       tx.Commit();
  }
}
Assert.That(sample.Id, Is.EqualTo(0));
Assert.True(sample.IsTransient)

使用 'use_identifier_rollback' nhibernate 将 id 设置为 '0' 或更准确地设置为默认的身份。我的IsTransient 属性依赖于Id == 0

  • 当实体被删除时,您如何处理实体,如果实体是暂时的或已删除实体的 Id 是什么,...?

【问题讨论】:

  • 我知道我从来没有用过它。回滚通常意味着整个工作单元失败,这包括实例化对象的代码。
  • @oskar 是的,对于一个新实体来说,这听起来很合理。但是,当您删除一个实体时,您期望什么行为?它现在是瞬态的并且 id 是“0”吗?
  • 到目前为止,我只在实体被删除后才使用它,因此它的 id 无关紧要。是否用于某种死后记录目的?

标签: c# nhibernate entity identity rollback


【解决方案1】:

看起来它还没有在 NHibernate 中实现。请参阅 NHibernate 的问题跟踪器:NH-387。如果它对您很重要,请登录并为该问题投票。你甚至可以通过 GitHub 贡献单元测试和修复。看起来有人已经在这个问题上做了一些工作 - 有几个补丁文件附加到这个问题上,但我不知道它们处于什么状态。

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多