2012-01-26 11 views
0

私はCastle ActiveRecordを倉庫プロジェクトで使用しています。私は頻繁に更新されるいくつかのテーブルを持っています:インフィード、スタック、stack_location。ロットが発生している場合(インフィードが追加され、スタックが形成される)、CreateAndFlushを呼び出した後にオブジェクトに設定されるIDが別のテーブルのIDになることがあります。データベースはMySQLであり、ID列はint(11)で、auto_incrementの主キーではありません。 IDプロパティにPrimaryKeyType.Nativeを使用します。Castle ActiveRecordがCreateAndFlushの間違ったテーブルからIDを返す

私はまた、次の問題に苦しん:だけ私の切込みテーブルと How to retrieve the last insert ID in Castle ActiveRecord? (と私は通常、4つのスタック/切込みのようなものを持っています)。 5000msのスリープとその後のSaveAndFlushでこの状況にキャッチを追加し、その時点でIDを取得するようにしました。

私は後で私に手渡すPLCに書き込むためにIDが必要なので、直接フラッシュする必要があります。私のアプリケーションはマルチスレッドですが、私が正しいとすれば、このすべてが間違ってしまうと、データベースに書き込むスレッドが1つだけです。私は揮発性とマークされたものは何もありません。複数のスレッドからのデータベースアクセスを妨げるロックはありませんが、Castle ActiveRecordは適切な場所をロックしていると仮定します。すでに私の質問にコメントで述べた

+0

私は自分の質問に答えるのが嫌いですが、私はそれがすべて間違っていることが分かったようです。どうやら、nHibernateは意図的にスレッドを認識していません。そのため、私は別のスレッドの内部で使用されるnHibernateセッションの世話をする必要があります。 Castle ActiveRecordを使用すると、この問題を解決するために 'using(new SessionScope())'ブロックをスレッド内で使用するように思われます。誰かがより良い提案やより明確な説明を持っているなら私は明らかに興味があります。 – mycroes

+0

あなた自身の質問に答えることができ、数日後にそれを受け入れます。 –

答えて

0

として:

私は自分の質問に答えることを憎むが、私はそれがすべて間違ってやっていることを私が見つけたようです。どうやら、nHibernateは意図的にスレッドを認識していません。そのため、私は別のスレッドの内部で使用されるnHibernateセッションの世話をする必要があります。 Castle ActiveRecordを使用すると、この問題を解決するために 'using(new SessionScope())'ブロックをスレッド内で使用するように思われます。誰かがより良い提案やより明確な説明を持っているなら私は明らかに興味があります。

私が持っていたすべての問題はもう戻りませんでした。

関連する問題