2012-01-09 14 views
6

मैं लिनक और जेनेरिक के साथ प्रयोग कर रहा हूं। अभी के लिए, मैंने अभी एक GetAll विधि लागू की है जो दिए गए प्रकार के सभी रिकॉर्ड देता है।लिंक-टू-एंटिटीज, जेनरिक और प्रीकंपिल्ड क्वेरीज

class BaseBL<T> where T : class 
{ 
    public IList<T> GetAll() 
    { 
     using (TestObjectContext entities = new TestObjectContext(...)) 
     { 
      var result = from obj in entities.CreateObjectSet<T>() select obj; 
      return result.ToList(); 
     } 
    } 
} 

यह ठीक काम करता है। इसके बाद, मैं क्वेरी precompile चाहते हैं:

class BaseBL<T> where T : class 
{ 
    private readonly Func<ObjectContext, IQueryable<T>> cqGetAll = 
    CompiledQuery.Compile<ObjectContext, IQueryable<T>>(
     (ctx) => from obj in ctx.CreateObjectSet<T>() select obj); 

    public IList<T> GetAll() 
    { 
     using (TestObjectContext entities = new TestObjectContext(...)) 
     { 
      var result = cqGetAll.Invoke(entities); 
      return result.ToList(); 
     } 
    } 
} 

यहाँ, मैं निम्नलिखित हो:

base {System.Exception} = {"LINQ to Entities does not recognize the method 
'System.Data.Objects.ObjectSet`1[admin_model.TestEntity] CreateObjectSet[TestEntity]()' 
method, and this method cannot be translated into a store expression."} 

इस के साथ समस्या क्या है? मुझे लगता है कि समस्या प्रीकंपील्ड क्वेरी के निष्पादन के परिणामस्वरूप है, लेकिन मैं कल्पना करने में असमर्थ हूं क्यों।

+0

आपको क्यों लगता है कि इसके लिए आपको संकलित क्वेरी की आवश्यकता है? आपको इसकी आवश्यकता नहीं है –

+0

त्रुटि से संबंधित नहीं है; लेकिन अगर यह * काम * करता है, तो आप 'cqGetAll' को 'स्थिर' फ़ील्ड –

+0

@ जेफ मर्कडो बनाना चाहते हैं - मुझे इस मामले के लिए इसकी आवश्यकता नहीं है, लेकिन मैं इसे अधिक जटिल प्रश्नों के साथ विस्तारित करने की योजना बना रहा हूं – loodakrawa

उत्तर

4

मुझे यह अपवाद था जब मैंने LINQ क्वेरी के अंदर विधियों का उपयोग किया जो इकाई मॉडल का हिस्सा नहीं हैं। समस्या यह है कि precompiled क्वेरी CreateObjectSet प्रकार TestEntity के लिए नहीं बुला सकती है क्योंकि प्रीकंपील्ड क्वेरी उस संदर्भ का हिस्सा नहीं है जिसका उपयोग इसे करने के लिए किया जाता है।

+0

ऐसा लगता है। CreateObjectSet के साथ संयोजन में precompiled क्वेरी का उपयोग करते समय मुझे एक ही अपवाद मिलता है। इसका मतलब है कि इसका जेनेरिक से कोई लेना देना नहीं है। – loodakrawa

संबंधित मुद्दे