0
在NH中是一個配置設置'use_identifier_rollback',它將實體的id設置恢復爲默認值。nhibernate use_identifier_rollback all-delete-orphan
此設置適用於除'delete-orphan'以外的每個級聯選項。 (我知道爲什麼!)
// 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 rollbacking保存時? 在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'嗎? – crip
到目前爲止,除了在被刪除之後全部使用該實體,因此它的id並不重要。這是爲了某種死後採伐目的嗎? –