2016-12-16 3 views
0

今年12月の初めより前に、私たちの現在のコードは問題なく機能しました。最近、このエラーが発生した複数のインスタンスがありました。私は、現在のコードで何か問題があるのを見つけることに問題があります。 global.asaxで1つのSessionFactoryを作成しています。トランザクションのバインドとバインド解除。コードは次のとおりです。nHibernateエラーコレクションを2つの開いているセッションに関連付ける不正な試み

私たちのコードがsession.Update(エンティティ)を実行すると、非常に時折、不正な操作エラーが発生します。この問題を防ぐためにできることは他にありますか?

ちょうどそれが私たちのセッションファクトリの設定からのものであることをオフのチャンスに、ここでセッションファクトリを作成するための我々のコードは次のとおりです。

sessionFactory = Fluently.Configure() 
         .Database(OracleClientConfiguration.Oracle10.ConnectionString(System.Configuration.ConfigurationManager.ConnectionStrings["nHibernateConnection"].ToString()).ShowSql()) 
         .ExposeConfiguration(cfg => cfg.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, "web")) 
         .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyObjectMap>()) 
         .ExposeConfiguration(cfg => 
         { 
          UpdateEventListener updateListener = new UpdateEventListener(); 
          cfg.EventListeners.PreUpdateEventListeners = 
           new IPreUpdateEventListener[] { updateListener }; 
          cfg.EventListeners.PostLoadEventListeners = 
           new IPostLoadEventListener[] { updateListener }; 
          cfg.EventListeners.PostUpdateEventListeners = 
           new IPostUpdateEventListener[] { updateListener }; 
          cfg.EventListeners.PreInsertEventListeners = 
           new IPreInsertEventListener[] { updateListener }; 
          cfg.EventListeners.PostInsertEventListeners = 
           new IPostInsertEventListener[] { updateListener }; 
         }) 
         .BuildSessionFactory(); 

答えて

0

が、これは同時に実行される要求とは何かだろうか?私。リクエスト1が開始され、コンテキストセッションが設定され、セッションに何かが保存されます。リクエスト2が開始され、コンテキストセッションが設定され、R1によって設定されたセッションが上書きされます。 R1は引き続き、R1によって作成されたセッションに関連付けられたコレクションを使用して何かをしようとします。

このような場合、またはそのような場合は、コンテキストセッションの使用を再考する必要があります。 DIを使用し、要求スコープを使用してセッションを挿入するほうが良いかもしれません。

関連する問題