我想知道如何最好地处理问题"已知NHibernate缓存对象处于错误状态。
做了一个小小的,愚蠢的例子来说明我遇到的问题。
public void RepaintCar(ISession session, int carId, System.Drawing.Color color)
{
try
{
session.BeginTransaction();
var car = session.Query<Car>().First(x => x.Id == carId);
car.FrontColor = color;
throw new Exception("Ran out of Paint. Could not finish job!");
car.BackColor = color;
session.SaveOrUpdate(car);
session.Transaction.Commit();
}
catch (Exception)
{
session.Transaction.Rollback();
}
}
public void StartCar(ISession session, int carId)
{
session.BeginTransaction();
var car = session.Query<Car>().First(x => x.Id == carId);
car.Start();
session.SaveOrUpdate(car);
session.Transaction.Commit();
}
public void TestScenario()
{
var session = SessionFactory.GetSession();
try
{
RepaintCar(session, 1, System.Drawing.Color.Red);
}
catch (Exception ex)
{
// lets ignore the exception, we probably just ran out of paint
}
StartCar(session, 1);
}
现在,如果我们运行TestScenario,我们显然会得到一个异常,并且不会发生Save&amp; Commit。精细。但!在StartCar中,我们将获得已更改FrontColor的缓存Car对象。保存的汽车将是前后不同颜色的汽车!
避免这种行为的最佳方法是什么?我知道我可以在发生事务回滚时创建session.Clear()。这是避免这种或多或少不可预测的行为的最好方法吗?