顧客に多数の注文が添付されている場合。どのようにNHibernateを使ってOrders Listを読み込むのが怠惰でしょうか?NHibernateでの遅延ロード
マッピングファイルを設定する必要がありますか?どのような助けや例も素晴らしいでしょう。
顧客に多数の注文が添付されている場合。どのようにNHibernateを使ってOrders Listを読み込むのが怠惰でしょうか?NHibernateでの遅延ロード
マッピングファイルを設定する必要がありますか?どのような助けや例も素晴らしいでしょう。
HERESに良い記事:上記の記事から
http://blogs.chayachronicles.com/sonofnun/archive/2007/03/30/230.aspx
:
最も一般的には単に「怠惰= 『true』を」属性や場所のデフォルトを持つクラスをマークすることです-lazy = "true" を」マッピング宣言で:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="@[email protected]"
default-access="nosetter.camelcase-underscore" default-lazy="true">
それとも
<class name="Cei.eMerge.Core.Domain.Contacts.Contact" table="Contact" lazy="true" >
クリスの提案は、あなたがそうのような怠け者であるためにあなたの条件にFetchmodeを設定することができ、実行時にそれをしたいがあれば、私はそれを行うだろうかです:
criteria.SetFetchMode("Orders", FetchMode.Lazy)
レイジーロードへエンティティの特定のコレクションでは、コレクションマッピングで "lazy = true"を使用します。例えば:
<bag name="EmploymentHistory" cascade="all" inverse="true" lazy="true">
<key column="PersonID" />
<one-to-many class="MyDomain.EmploymentRecord, MyDomainAssembly" />
</bag>
ここでの回答のすべてが正しいですが、非常に多くの注文がある場合、あなたはまた、あなたがそれらのすべてをロードする必要がないように、フィルタを使用したいmigth。
Customer customer = session.CreateCriteria(...) .SetFetchMode("Orders", FetchMode.Lazy) .UniqueResult<Customer>(); Ilist<Order> orders = session.CreateFilter(customer.Orders," WHERE this.OrderDate < ?") .SetDateTime(...).List();
お客様のエンティティには、すべてのオーダーが含まれているプロパティが必要ですか? これはかなり大きなコレクションになると思います。
あなた自身に尋ねなければならない疑問は、
本当に顧客の注文に何度もアクセスする必要がありますか?
おそらく、この場合、双方向の関連付けをしたくないのでしょうか?おそらく、CustomerクラスにOrdersコレクションを置くことは望ましくありません。
その後、私は次のシグネチャがあり、私の注文リポジトリにメソッドを追加します。
IList<Order> GetOrdersForCustomer(Customer c);
をしかし、これはあなたの状況に実現可能であるならば、私は知りません。