سؤال

عادةً ما أتعلم واجهات باستخدام detachedcriteria في nhibernate:

DetachedCriteria crit = DetachedCriteria.For<IParent>();

وهذا يعمل بشكل جيد.

أريد الآن إنشاء مسمة فرعية لكائن طفل هكذا:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>();

وأضفها إلى معايير كهذه (نوع من ، P.Child هو في الواقع الاسم المستعار لكنني أبسط):

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));

هذا يعمل إذا كان detchedcriteria الخاص بي للطفل:

DetachedCriteria subcrit = DetachedCriteria.For<Child>();

ولكن ليس هو للواجهة (على النحو الوارد أعلاه). في هذه الحالة ، أحصل على استثناء:

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild

هل هذا شيء من المفترض أن يكون أم أنني أفتقد بعض التكوين؟

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

المحلول

لا أعتقد أنك ستتمكن من الاستعلام عن الواجهة في هذه الحالة لأن Nhibernate لن يتمكن من العثور على فئة تنفيذ مناسبة أنت تهدف إلى الاستعلام. على سبيل المثال ، لنفترض أن لديك تطبيقًا آخر لـ IChild يسمى childlight (أو شيء تم تعيينه إلى جدول مختلف) ، ليس لدى Nhibernate أي اتجاه يتم تنفيذ الفئة لاستردادها.

تحتاج إلى إنشاء detachedcriteria.for <fild> () بدلاً من الواجهة.

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