سؤال

لديّ كيان 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 يتطلب تعيين العلاقات كمجموعات بدلاً من الحقائب للقيام بذلك ، لأن الحقائب تسمح بتكرار.

على أي حال ، المنتجات الديكارتية غير فعالة للغاية. استخدم استفسارات متعددة أو مستقبلية بدلاً من ذلك.

يرى:

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