問題タブ [isession]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernateのISessionについて
この質問では、ユーザーはエラーが発生していたため、セッションを閉じるためのより良い方法を尋ねます。
最も投票された答えは、次のようなAyendeの答えです。
常にsession.Dispose();を使用する必要があります。もう1つは非常に奇妙な出来事のためのものです
私は本当にいつも電話するべきsession.Dispose()
ですか?電話するだけでは不十分session.Close()
ですか?
nhibernate - SessionScope は ISession とまったく同じですか?
Castle ActiveRecord の SessionScope は NHibernate の ISession とまったく同じですか? はいの場合、Castle ActiveRecord が重複した機能を提供したのはなぜですか? いいえの場合、それらの違いは何ですか?
nhibernate - ActiveRecordMediator 内で、Execute または CreateSession を使用する必要がありますか?
NHibernate のISession
. たとえば、 を介して Sql クエリをISQLQuery
実行するか、 を介して LINQ-to-NHibernate を実行しsession.Linq<MyType>()
ます。アクセスするには2つの方法があることを知っていますISession
:
ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()
ActiveRecordMediator.Execute()
それぞれの長所と短所は何ですか?さらに、別の代替方法はありますか?
asp.net-mvc - IsessionFactoryの問題
この行で、従来の「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します
私のconfigure.csファイルは次のとおりです
webconfigに接続文字列があります
VS2008内でビルドされたappcodeフォルダー内のProducts.mdfを使用
なぜ私がこの問題を抱えているのか、何か考えはありますか?
.net - NHibernate で追加操作をキューに入れる方法は?
Linq to SQL や Entity Framework と同じように、NHibernate で「追加」操作をキューに入れる方法はありますか?
エンティティをリポジトリに追加したいのですが、ビジネス ロジックが複雑であるため、すぐにデータベースに保存したくありません。Entity Framework と同じように、ITransaction.Commit() を呼び出すときにすべての変更を送信したいと考えています。それをしてもいいですか?
注: ISession.Save() メソッドを呼び出すとすぐに NHibernate が挿入コマンドを実行することがわかりましたが、これは想定外です。
更新: FlushMode を Commit に設定してみます。ただし、ITransaction.Commit() を呼び出したときにすべての変更をコミットするのではなく、エンティティをすぐに保存します。
更新 2ここで理由を見つけましたhttp://nhibernate.info/doc/nh/en/index.html#manipulatingdata-flushing : (例外は、ネイティブ ID 生成を使用するオブジェクトが保存時に挿入されることです)。IDジェネレーターを「ID」以外のものにしか変更できませんか?EntityFramework のソリューションに似たソリューションは他にありませんか?
.net - WebSessionContext/CurrentSessionContext を使用した ISession の遅延初期化
NHibernate 3 で新しいプロジェクトを開始しており、WebSessionContext で CurrentSessionContext API を使用して ISession オブジェクトを管理しようとしています。
以前のプロジェクトでは、私は常にそれを自分で管理していたので、ISession オブジェクトが必要になるたびに、それを作成して HttpContext.Items コレクションに格納していました。非常に簡単ですが、この新しいプロジェクトにはネイティブ ソリューション (CurrentSessionContext) を使用するのが最適なオプションのようです。
オブジェクトを管理したときに、遅延初期化を行うことができました。つまり、すべてのリクエストではなく、必要なときにのみセッションを開くことができました。これは、必要ない可能性があり、すべてを開くことでリソース/時間を浪費するためです。時間。
CurrentSessionContext API でそれを行う簡単な方法はありますか?
これを担当する HttpModule で使用しているコードは次のとおりです。
編集
Diego はほぼ完璧にやり遂げましたが、私はこれについてもう少し考え、私がそのコントロールを自分で実装した主な理由を思い出しました: トランザクションです。
私はオニオン アーキテクチャの専門家なので、ドメイン オブジェクト (いつトランザクションを開始するかを知っているオブジェクト) はインフラストラクチャにアクセスできないため、トランザクションを開始できません。
これを解決するために、遅延初期化を使用し、セッションを開くときに常にトランザクションを開始します。コミットは、リクエストが終了し、例外がキャッチされなかったときに発生します。これに加えて、クエリを実行する場合でも、常にトランザクションを使用するという Ayende のアドバイスがあります。何かご意見は?
nhibernate - NHibernate が同じオブジェクトを複数回ロードしています - 助けてください!
ASP.NET ページの 1 つのトレースを読んでいて、ユーザーが必要になるたびにページ ユーザーがデータベースから読み込まれていることに気付きました。それぞれISession
がオブジェクトをキャッシュすることになっているので、私はこれについて本当に当惑しています。
論理的には、問題は次の 2 つのいずれかである必要があります。
- の
ISession
キャッシュが正しく機能していません - ユーザーがリクエストされるたびに、別の
ISession
問題は2番だと思います)。私は Castle Windsor を使用してオブジェクトのライフサイクルを管理しているので、誰かが問題を見つけるのを手伝ってくれる場合に備えて、使用しているコードの一部を投稿しました。Castle Windsor が管理しているクラスは次のとおりです。
MooseUserRepository
- MooseUser インスタンス (つまり、この場合はページ ユーザー) を管理するためのリポジトリ クラスKctcUnitOfWork
- ISession のラッパー
MooseUserRepository
KctcUnitOfWork
次のようなコンストラクタ依存関係があります。
構成ファイルは次のようになります。
PerWebRequest
ライフスタイルに注意してください。
Castle Windsor コンテナは、呼び出される一種のユーティリティ クラスの単なる静的プロパティであるMoose.Application
ため、常に存在します。
ページ自体には、次のような IMooseUserRepository インスタンスがあります。
ページのユーザーは、次のようなプロパティによってアクセスされます。
これらの後続の呼び出しPageUser
により、重複した SQL コマンドが発生しているようです。
明らかに、ロードされたオブジェクトをプライベート変数に保存することでこの問題を回避できMooseUser
ますが、私の理解では、ISession
これは私のために行うはずです。
何がうまくいかないのか、誰でも推測できますか?
nhibernate - EF4ObjectContextとNHibernateセッション
EF4に飛び込んだ後、NHibernateを学ぼうとしています。EF4 ObjectContext(またはDbContext)と同等のNHibernateセッションですか?
具体的には、EF4では、ObjectContext(またはDbContext)から派生し、クラスには各エンティティの明示的なObjectSetが含まれています(例:
これまで見てきたNHibの例では、Sessionオブジェクトはこのように使用されていません。私は何かが足りないのですか?
nhibernate - NHibernate ISession.Persist() のドキュメントはどこにありますか?
NHibernate の ISession は、2 つのオーバーロードを持つメソッド Persist() を公開します。この方法に関するドキュメントはどこにも見つかりません。http://nhibernate.info/doc/nh/en/index.htmlのNHibernateの参考資料にも言及されていません。
このメソッドは非推奨ですか、それとも廃止されますか? いつ使用することになっていますか?SaveOrUpdate() と比べてどうですか?
どんなポインタでも大歓迎です。
nhibernate - ActiveRecordBase.FindAll() は一次キャッシュを許可しませんか?
NHibernate の 1 次キャッシュは、同じセッションを使用する場合に使用できます。ActiveRecordBase.FindAll()
毎回新しい を作成しISession
ます。したがって、次のような場合は、一次キャッシュから利益を得ることができません。
解決策はありますか?