nhibernate - A correct way to load entities by Id list when Id is not mapped -


मेरे पास निम्न कोड है

  string idName = builder.IdentifierName; विस्थापन विघटन = प्रतिबंध.डिसीकरण (); आईएलआईआईएसआईडीआईडी ​​= नया अर्रेइलाइट (इकाईइंफोस.लाइन); Foreach (इकाई entityInfos में var entityInfo) {आईडी.एड (entityInfo। आईडी); } विच्छेदन। जोड़ें (प्रतिबंध। इन (idName, आईडी)); criteria.Add (अलगाव); criteria.List ();  

(मैं इसे नहीं लिखा है, यह NHibernate.Search से कोड सरलीकृत है)

idName का मान सही है ( "आईडी" )।

मेरे मैपिंग में मेरे पास आईडी संपत्ति के लिए आईडी नहीं है, यह केवल डीबी है:

  & lt; आईडी कॉलम = "आईडी" प्रकार = "इंट" & gt; & Lt; जनरेटर वर्ग = "मूल" / & gt; & Lt; / आईडी & gt;  

जब मैं कोड चलाने के लिए, यह एक अपवाद फेंकता है:

  [QueryException: संपत्ति हल नहीं कर सका: ईद की: MyType] NHibernate.Persister.Entity .AbstractPropertyMapping.ToType (स्ट्रिंग प्रॉपर्टी) 326 NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetTypeUsingProjection (ICriteria subcriteria, स्ट्रिंग प्रॉपर्टी) 416 NHibernate.Criterion.InExpression.AssertPropertyIsNotCollection (ICriteriaQuery criteriaQuery, ICriteria मापदंड) +41 NHibernate.Criterion.InExpression। ToSqlString (ICriteria मापदंड, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters) +49 NHibernate.Criterion.Junction.ToSqlString (ICriteria मापदंड, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters) 448 NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition (IDictionary`2 enabledFilters ) +354 NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable persister, CriteriaQueryTranslator अनुवादक, ISessionFactoryImplementor कारखाने, ICriteria मापदंड, स्ट्रिंग rootEntityName, IDictionary`2 enabledFilters) 516 NHibernate.Loader.Criteria.CriteriaLoader..ctor (IOuterJoinLoadable persister, ISessionFactoryImplementor कारखाने, CriteriaImpl rootCriteria, स्ट्रिंग rootEntityName, IDictionary`2 enabledFilters) 220 NHibernate.Impl.SessionImpl.List (CriteriaImpl मापदंड, IList परिणाम) 364 NHibernate.Impl.CriteriaImpl.List (IList परिणाम) 63 NHibernate.Impl.CriteriaImpl.List () +46  

क्या करने के लिए सही तरीका क्या है एक प्रतिबंध और मानदंड तैयार करें ताकि मैं आईडी से खोज कर सकूं, भले ही इसे मैप नहीं किया गया हो?

कोशिश करें IdEq इसके बजाय इसे एक और संयोजन की आवश्यकता है।

  अवधारणा ids रक्षित = प्रतिबंध.डिसीकरण (); EntityInfo। चुनें (x = & gt; x.Id) .toList () .पहला (आईडी = & gt; आईडी रिसेक्शन.एड (प्रतिबंध.आईडीईएक्स (आईडी))); disjunction.Add (idsRestriction);  

ध्यान दें: यह (आईडी = 1 या आईडी = 2 या आईडी = 3 ...) के बजाय की तरह कुछ उत्पन्न करेगा (id IN ( 1, 2, 3)

सौ प्रतिशत यकीन है कि यह काम करता है, लेकिन यह चाहिए।


Comments

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -