2010-11-24 7 views
1

私はNHibernateを初めて使っていますが、私の最新プロジェクトではうまく動作しています。しかし、今、私はそれを解決するために抽象化を超えなければならない、必然的なパフォーマンスの問題に達しました。NHibernateの遅延ロードが自分のドメインで動作していないようですか?

私は長い時間がかかるメソッドを分離するためのnunitテストを作成しました。しかし、最初に私のドメインモデルの簡単な概要はおそらく良い考えです:

私は名前、番号などを含む 'プロジェクト'オブジェクトを持つオブジェクトである 'PmqccForm'を持って、それはまた、 '質問'オブジェクトは、さまざまな異なる' Question 'オブジェクトのプロパティを含むクラスです。 JobVelocityQuestionオブジェクトには、それ自身が回答といくつかの他のプロパティを持ち、同様の質問オブジェクトがたくさんあります。 Question DOmain Model

キーポイントは、私は を入力できるようにしたいということです: これは私が私のPmqccFormが質問を持って話しているものです。これは、モデルの質問の一部である alt text

オブジェクトform.Questions.JobVelocityQuestion

各PmqccFormのJobVelocityQuestionは常に正確に1つあり、他のすべての質問でも同じです。これらは、質問オブジェクトのC#プロパティであり、質問オブジェクトは単なる保持場所です。

今、私に問題を引き起こしている方法はこれです:

 public IEnumerable<PmqccForm> GetPmqccFormsByUser(StaffMember staffMember) 
    { 
     ISession session = NHibernateSessionManager.Instance.GetSession(); 

     ICriteria criteria = session.CreateCriteria(typeof(PmqccForm)); 
     criteria.CreateAlias("Project", "Project"); 
     criteria.Add(Expression.Eq("Project.ProjectLeader", staffMember)); 
     criteria.Add(Expression.Eq("Project.IsArchived", false)); 
     return criteria.List<PmqccForm>(); 
    } 

ただ、この方法を実行するNUnitのテストから私のコンソールの外観はほぼ2000のSQLクエリがprocesssedさがあることを示しています! http://rodhowarth.com/otherstorage/queries.txtはコンソールログです。

私はちょうどフォームオブジェクトをしたい、実際の質問は、基礎を知る必要性にアクセスすることができますこの段階では、です。私はNHibernateがこれを行うことができると考えていたと思った?ここで

は私のマッピングファイルです: http://rodhowarth.com/otherstorage/hibernatemapping.txt

誰もが私が欠けているものにとして私をヒントことができますか?またはNHibernateとの関係で私がやっていることを最適化する方法?

質問をコレクションにしてから、このコレクションを介してプロパティをループし、正しいものを返すとどうなりますか?これはnhibernatesの観点からより良い最適化ですか?

+0

は、あなたが上記のメソッドを呼び出しているかwiht記事を更新してくださいことはできますか? – Baz1nga

答えて

0

Questionsコンポーネントのマッピングファイルにfetch = "subselect"を追加して、このテーブルに複数選択の問題が解決するかどうかを確認してください。

<component name="Questions" insert="true" update="true" class="PmqccDomain.DomainObjects.Questions" fetch="subselect"> 

詳細はを参照してください - Improving performance

+0

フェッチ属性をそのコンポーネントに追加すると「XML検証エラーが発生します:「フェッチ」属性が宣言されていません。"そのため、私はそれをその下の1対1のマッピングに追加しようとしましたが、subselectは有効な値ではないと言います(参加などは何も行いませんが)。 – RodH257

+0

はフェッチ設定をサポートしていませんそのため、代わりにコレクションマッピングに置き換えようとするとよいかもしれません。例えば、の場合、 <キー列= "PmqccFormId" /> ...

関連する問題