مجموعات التحميل بفارغ الصبر في nhibernate باستخدام معايير API
سؤال
لديّ كيان A الذي Hasmany الكيانات B والكيانات C. جميع الكيانات A و B و C لها بعض المراجع X و Y و Z التي يجب تحميلها بشغف.
أريد أن أقرأ من قاعدة البيانات جميع الكيانات A ، وتحميل مجموعات B و C بفارغ الصبر باستخدام معايير API. حتى الآن ، أنا قادر على إحضار المراجع في "أ" بفارغ الصبر. ولكن عندما يتم تحميل المجموعات ، يتم تحميل المراجع داخلها.
إليكم كيف أفعل ذلك
AllEntities_A =
_session.CreateCriteria(typeof(A))
.SetFetchMode("x", FetchMode.Eager)
.SetFetchMode("y", FetchMode.Eager)
.List<A>().AsQueryable();
رسم الخرائط للكيان A باستخدام بطلاقة كما هو موضح أدناه. _B و _C هم ilists خاصة لـ B&C على التوالي في A.
Id(c => c.SystemId);
Version(c => c.Version);
References(c => c.x).Cascade.All();
References(c => c.y).Cascade.All();
HasMany<B>(Reveal.Property<A>("_B"))
.AsBag()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Inverse()
.Cache.ReadWrite().IncludeAll();
HasMany<C>(Reveal.Property<A>("_C"))
.AsBag()
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.Cache.ReadWrite().IncludeAll();
لا أريد إجراء تغييرات على ملف التعيين ، وأرغب في تحميل الكيان بأكمله بشغف. على سبيل المثال ، يجب أن أحصل على قائمة بـ A's حيث ستكون هناك قائمة بـ B's و C التي سيتم تحميل خصائصها المرجعية بشغف
المحلول
أنت تحاول القيام بمنتج ديكارت هنا. أعتقد أن nhibernate يتطلب تعيين العلاقات كمجموعات بدلاً من الحقائب للقيام بذلك ، لأن الحقائب تسمح بتكرار.
على أي حال ، المنتجات الديكارتية غير فعالة للغاية. استخدم استفسارات متعددة أو مستقبلية بدلاً من ذلك.
يرى:
- nhibernate: حريصة تحميل مجموعتين طفلتين (واحدة هي قائمة مكونات)
- https://nhibernate.jira.com/browse/nh-1471
- http://nhibernate.info/blog/2008/09/06/eager-igregate-with-many-child-collections.html
- http://ayende.com/blog/archive/2010/01/16/eagerly-loading-entity-associations-felively-with-nhibernate.aspx