我有一个使用NHibernate的ASP.NET应用程序,可以根据用户操作以事务方式更新一些表。涉及到一个日期范围,因此只能对表“ Booking”进行一次输入,从而指定独占日期。
我的问题是如何防止出现竞争状况,即两个用户动作几乎同时发生,并导致多个项输入“预订”超过1个日期。我无法在调用.Commit()之前进行检查,因为我认为仍然会出现竞争状况吗?
我所能看到的只是在提交后进行检查,然后手动将更改回滚,但这使我的口中很难受!:)
booking_ref(INT)PRIMARY_KEY AUTOINCREMENT booking_start(DATETIME) booking_end(DATETIME)
booking_ref(INT)PRIMARY_KEY AUTOINCREMENT
booking_start(DATETIME)
booking_end(DATETIME)
session.BeginTransaction(IsolationLevel.Serializable
或者
session.CreateSQLQuery(“选择null作为来自预订WITH(tablockx,holdlock)的虚拟对象”).AddScalar(“ dummy”,NHibernateUtil.Int32); 这将仅锁定该表以在该事务期间进行选择/插入。
希望能有所帮助