Теперь, после долгих поисков, я нашел довольно простой способ сделать это. Ниже приведены шаги, чтобы воспроизвести это.
Наличие метода Thread.Sleep () между методами Get () и Update () только для одного пользователя (процесс 1).
Когда процесс 1 запущен, запустите процесс 2, который не сталкивается с Thread.Sleep (), и завершите обновление до того, как процесс 1 сделает.
Теперь процесс 2 изменил данные в базе данных, теперь, когда процесс 1 пытается обновить данные, NHibernate генерирует исключение устаревшего объекта.
Пожалуйста, используйте следующий фрагмент кода.
public void Update(int empid)
{
Employee person = this.dalService.GetByEntityId(empid);
person.Name = "Process 1";
// At this point , Update the Person table manually using raw sql query
// such as this 'Update Person Set Name = 'Process 2'where empid = @empid;
// When the update is performed , it is expected to throw the exception , as the in memory data
// is different from the one in database.
if (username.equals("Bob"))
{
Thread.Sleep(50000);
// If this is a website, have the above condition, so that it is simulated only for one user.
}
this.dalService.Update(person);
}