Session.Update
を使用してエンティティを更新してから、別のSQLクエリを実行し続けようとしています。他のクエリは変更された値を認識しませんでした。プロファイラーを使用してトレースしたとき、Session.Update
何もしませんでした。
public class InvoiceService()
{
public void Update(Invoice invoice)
{
using (var trans = BeginTransaction())
{
Session.Update(invoice); //Nhibernate did not update invoice.
ExecuteNamedQuery(); //Query executed before invoice updated.
trans.Commit(); //Invoice updated.
}
}
}
次に、Session.Updateの後にSession.Flushを追加します。
using (var trans = BeginTransaction())
{
Session.Update(invoice);
Session.Flush()
ExecuteNamedQuery();
trans.Commit();
}
実行後Session.Flush
、更新用のSQLクエリも実行されます。それは完璧に動作します。実行順序は正しいです。しかし、それから私はすべての請求書を取得するために別の方法を実行しました。トランザクションをコミットすると、nhibernateは更新クエリを実行して、更新された請求書を古い値で以前に更新します。(例:数量= 20、10に更新され、次に20に再度更新されます)
public void FindAll()
{
using (var trans = BeginTransaction())
{
var invoices = Session.CreateCriteria<Invoice>().List<Invoice>();
trans.Commit(); // In here invoice that i updated earlier get updated again, using old values.
return invoices;
}
}
なぜ再び更新されるのですか?
この問題の解決策は何ですか?
前もって感謝します。