この問題は、データマネージャの他の多くの場所で機能するため、非常に奇妙です。何らかの理由で、以下のように記述された新しいコードではエラーは発生しませんが、データベースでは更新されません。システムメモリ内のセッションは正しく見えますが、.Commit()
が呼び出されたときに変更は適用されません。Hibernateセッションの変更がデータベースに永続化されていない
using (var scope = new UnitOfWorkScope())
{
InsuranceCertificate cert = _certificateRepository.SingleOrDefault(x => x.Id == certId);
cert.Status = new Enumeration<CertificateStatus>(CertificateStatus.Rejected);
cert.RejectedDate = DateTime.Now;
cert.RejectedReason = reason;
_certificateRepository.Add(cert);
scope.Commit();
scope.Complete();
}
Fluent NhibernateとCastle Windsorを使用しています。ここでも、上記と同様の以前のコードは期待通りに動作しますが、新しいコードでは動作しません。
私たちはセッションを直接使用しているので、私はこのトピックについてほとんど助けを得ていません。何か案は?
EDIT以下を言っ
log4netのログ:2012-01-24 11:39:13475 [37] DEBUG NHibernate.Event.Default.AbstractSaveEventListener [(ヌル)] <(ヌル)> - 永続的なインスタンス:IDOI.Certificate.Domain.Model.Policy.InsuranceCertificate 2012-01-24 11:39:13,475 [37] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)] <(null)> - 永続性を無視するインスタンス2012-01-24 11:39:13,475 [37] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)] <(null)> - すでにセッションに関連付けられているオブジェクト:[IDOI.Certificate.Domain.Model.Policy.InsuranceCertificate#5]
あなた 'FlushMode'がに設定されていますか? – vcsjones
不明です。これはすべてGlobal.asax.csファイルで設定します。私はデフォルトが何であれ仮定します。 – trambre
掘削した後、Autoに設定されます。 – trambre