2016-07-29 4 views
1

により、すべての加入者の同時実行には、セッション - NHibernateはとREBUS同時実行の問題で、データベースの状態を同期できませんでした

NHibernate.Event.Default.AbstractFlushingEventListener 

NHibernate.AdoNet.TooManyRowsAffectedException: Unexpected row count: 5; expected: 1 
    at NHibernate.AdoNet.Expectations.BasicExpectation.VerifyOutcomeNonBatched(Int32 rowCount, IDbCommand statement) 
    at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session) 
    at NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session) 
    at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session) 
    at NHibernate.Action.EntityUpdateAction.Execute() 
    at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) 
    at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) 
    at NHibernate.Engine.ActionQueue.ExecuteActions() 
    at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) 

これが起こるかもしれませんのようなエラーを取得してテーブル内の加入者の詳細情報を格納しながら、NHibernateのでREBUSを使用している場合ので、デバッガを使用すると、十分な時間が経過すると予期せず動作します。

'、予期しない行数

public void Insert(ISagaData sagaData, string[] sagaDataPropertyPathsToIndex) 
     { 
      try 
      { 
       var nSagaData = new NDbSagaData 
       { 
        Id = sagaData.Id, 
        Revision = sagaData.Revision++, 
        Data = JsonConvert.SerializeObject(sagaData, Formatting.Indented, Settings) 
       }; 
       PersistenceManager.Save(nSagaData); 
      } 
      catch (Exception ex) 
      { 
       _log.Error("Insert Exception " + ex.Message); 
       System.IO.File.AppendAllText("C:\\TestFolder\\WriteText.txt", "Insert fromSource - " + ex.Message); 
       throw new OptimisticLockingException(sagaData, ex); 
      } 
     } 

このコードで例外を取得し、それは言う:3;期待通り:1 '

理由は何ですか?

+0

これで何が間違っていたのか分かりましたか? – mookid8000

+0

@ mookid8000はい、実際にどういうわけかコード化バグのために、GUIDは複数回格納されます。したがって、3行2行でした。今解決されました。ありがとうございました。 –

+0

質問に答えると印を付けるのがいいでしょう - この方法では、Rebusの質問が答えに終わることがわかります:) – mookid8000

答えて

0

あなたはNHibernateに基づいてサガパイスタを実装しているようです。競合状態が検出されたようですが、これはロールバックされたトランザクションの結果を推測しているようです。

なぜ競合状態が発生したのでしょうかと思います。 "予期しない行数"例外は、NHibernateのオプティミスティック並行性チェックが失敗したときに発生しますが、その場合、予期しない行数0、予期される1というメッセージを期待していました。

私があなただったら、とにかくサガデータを1列にシリアル化しているようだから、Rebusの組み込みSQL Serverサガペスターを使用します。

関連する問題