使用Sharp Architecture / Fluent NHibernate,我为我的类设置了一个Version
属性(带有int
),但是,即使更新其对象正确更新了版本号,也没有错误抛出,版本基本上合并而不是抛出异常。
public class MyClassMap : IAutoMappingOverride<MyClass>
{
public void Override(AutoMapping<MyClass> mapping)
{
mapping.Version(x => x.Version);
mapping.OptimisticLock.Version();
}
}
请注意,两个并发提交的版本不同,但没有任何反应。
是什么给出了?
编辑:以下是代码:
public ActionConfirmation SaveOrUpdate(IncidenciaDetalleModel model)
{
Incidencia incidencia = model.Codigo == null
? new Incidencia(Convert.ToInt32(model.Solicitante.Id))
: Load(model.Guid);
TransferFormValuesTo(incidencia, model);
// Invoke Sharp NHibernate's SaveOrUpdate()
Incidencia saved = base.SaveOrUpdate(incidencia);
return ActionConfirmation.CreateSuccessConfirmation(saved);
}
private void TransferFormValuesTo(Incidencia incidencia, IncidenciaDetalleModel model)
{
incidencia.Resumen = model.Resumen.Trim();
incidencia.Descripcion = model.Descripcion.Trim();
incidencia.Solicitante = model.Solicitante.Id.ToString(CultureInfo.InvariantCulture);
incidencia.Regional = regionalTask.Load(model.Regional.GetRegionalId());
}
答案 0 :(得分:2)
你说版本更新正常,所以不适用约定。
我猜没有真正的并发更新。你使用Load(model.Guid)
,它不会从数据库加载对象,但会为它创建一个代理。它已加载TransferFormValuesTo
更新并立即保存。仅在TransferFormValuesTo
和SaveOrUpdate()
之间可能存在导致陈旧对象的竞争条件。
您可以启用“NHibernate.SQL”的日志记录,以查看客户端1的更新是否真的位于客户端2的SELECT之后