سؤال

وإذا كان العميل لديه العديد من الطلبات التي تعلق عليها. كيف كسول تحميل قائمة أوامر باستخدام NHibernate.

هل هناك شيء لا بد من إنشاء ملف التعيين؟ أي مساعدة أو مثالا تكون كبيرة.

هل كانت مفيدة؟

المحلول

وهيريس مادة جيدة:

http://blogs.chayachronicles.com/sonofnun /archive/2007/03/30/230.aspx

ومن المادة المذكورة أعلاه:

والأكثر شيوعا هو للاحتفال ببساطة الطبقة مع 'كسول = "الحقيقية" "السمة أو المكان" الافتراضية كسول = "صحيح" "في الإعلان رسم الخرائط:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="@core.assembly@"
 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)

لكسول، تحميل مجموعة معينة من كيان، استخدم "كسول = صحيح" على تعيين مجموعة. على سبيل المثال:

<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();

هل تريد أن الكيان العميل لديه خاصية يحتوي على كل ما قدمه من أوامر؟ وأعتقد أن هذا يمكن أن يكون لا بأس به مجموعة كبيرة.
أعتقد أن السؤال سيكون لديك أن تسأل نفسك هو:
كم مرة يمكنني حقا بحاجة إلى الوصول المباشر إلى أوامر من العملاء منتديات

وربما، في هذه الحالة، كنت لا تريد أن يكون لها جمعية ثنائية الاتجاه؟ ربما كنت لا تريد أن يكون لها مجموعة أوامر في الصف العملاء الخاص بك.
ثم، وأود أن أضيف طريقة لطلبي مستودع، الذي يحتوي على توقيع التالية:

IList<Order> GetOrdersForCustomer( Customer c );

ولكن، أنا لا أعرف إذا كان ذلك ممكنا لموقفك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top