nhibernate use_identifier_rollback all-delete-orphan
本文关键字:all-delete-orphan rollback identifier nhibernate use | 更新日期: 2023-09-27 18:29:41
在NH中是一个配置设置'use_identifier_rollback',它将实体的id设置回其默认值。
此设置适用于除"删除孤立项"之外的所有级联选项。(我知道为什么!)
看看C#标识符回滚
看看Java标识符回滚
// 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是什么
看起来它还没有在NHibernate中实现。参见NHibernate的问题跟踪器:NH-387。如果问题对你来说很重要,请登录并投票。你甚至可以通过GitHub贡献单元测试和修复。看起来有人已经在这个问题上做了一些工作-有几个补丁文件附加到这个问题上,但我不知道他们处于什么状态。