我在 nHibernate 上有一个竞争条件,它在我的数据库上创建了重复的条目。不幸的是,我无法UNIQUE
在数据库上创建索引,因此我想仅使用 nHibernate 方法来解决此错误。它是一个可能在网络场上运行的网络应用程序(因此我猜系统锁也不应该解决问题)。简化的情况如下:
var current = UnitOfWorkManager.Instance.Current;
current.BeginTransaction(IsolationLevel.Serializable);
try {
var myEntity = MyFactory.MyEntityRepository.GetBy(product, company);
// race condition happens between the previous statement and Save() method.
if (myEntity == null)
{
myEntity = new MyEntity();
myEntity.Product = product;
myEntity.Company = company;
myEntity.Date = date;
myEntity.CurrentUser = currentUser;
myEntity.IsManual = true;
myEntity.Save();
}
else
{
myEntity.IsManual = false;
myEntity.Save();
}
current.CommitTransaction();
}
catch {
current.RollbackTransaction();
throw;
}
我是 nHibernate 的新手,所以也许我在这里缺少一些基础知识。我会很感激任何反馈。:)