在 NH 中有一个配置设置“use_identifier_rollback”,它将实体的 id 设置回其默认值。
此设置适用于除“删除孤儿”之外的所有级联选项。(我知道为什么!)
看看C# 标识符回滚
// 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 是什么,...?