Все мои запросы ASP.NET упакованы в сеанс и транзакцию, которая фиксируется только в самом конце запроса.
В какой-то момент во время выполнения запроса я бынравится вставлять объект и делать его видимым для других потенциальных потоков - то есть разделить вставку на новую транзакцию, зафиксировать эту транзакцию и двигаться дальше.
Причина в том, что рассматриваемый запрос попадает в API, который затемЦепочка попадает на другую из моих страниц (почти синхронно), чтобы сообщить мне, что она обработана, и, таким образом, дважды отправляет запись транзакции, поскольку исходный запрос еще не завершен, и, следовательно, не фиксирует запись транзакции.
Итак, я попытался обернуть код вставки новым SessionScope, TransactionScope (TransactionMode.New), комбинацией обоих, сбросить все вручную и т. Д.
Однако, когда я вызываю Refresh для объекта, явсе еще получаю старое состояние объекта.
Вот пример кода для того, что я вижу:
Post outsidePost = Post.Find(id); // status of this post is Status.Old
using (TransactionScope transaction = new TransactionScope(TransactionMode.New))
{
Post p = Post.Find(id);
p.Status = Status.New; // new status set here
p.Update();
SessionScope.Current.Flush();
transaction.Flush();
transaction.VoteCommit();
}
outsidePost.Refresh();
// refresh doesn't get the new status, status is still Status.Old
Любые предложения, идеи и комментарии приветствуются!