से केवल बेस क्लास पुनर्प्राप्त करें यदि मेरे पास इकाई ढांचे में तीन वर्ग हैं।इकाई फ्रेमवर्क
class Base {}
class Left : Base {}
class Right : Base {}
और मैं फोन DBContext.Bases.ToList();
यह Base
पूरी तरह से उनके जुड़े विरासत में मिला प्रकार में टाइप के सभी उदाहरणों देता है, के रूप में कुछ लोगों को देखा है, बड़े विरासत संरचनाओं पर एफई के प्रदर्शन कम से कम कहने के लिए महान नहीं है । मेरी परियोजना में मेरी वास्तविक क्वेरी 600 लाइन लंबी है, केवल एक इकाई को वापस करने के लिए और उत्पन्न करने में 2 सेकंड लगती है।
यदि आप इसे बताते हैं कि कौन सा प्रकार वापस लौटना है, तो वे बहुत तेज़ी से चलते हैं, क्योंकि इसे पूरी संरचना में शामिल होने की आवश्यकता नहीं है। जैसे
DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();
हालांकि मैं अब करना चाहते हैं केवल आधार वर्ग लौटने। Unfortunalty रूप DBContext.Bases.ToList ही कर
DBContext.Bases.OfType<Base>.ToList();
है();
यह WHOLE विरासत संरचना प्राप्त करता है ... क्या की केवल बेस संग्रह को देखकर कक्षा बेस लौटने पर कोई तरीका है (ईएफ में नया प्रकार बनाये बिना)?
माफ करना, मैं नहीं कर सकते मेरे वास्तविक खाते में प्रवेश ...
हो सकता है कि मैं अपने आप को स्पष्ट करना नहीं था, मैं (बेस, बाएं और दाएं सहित) सभी वस्तुओं वापस लाना चाहते हैं, लेकिन मैं केवल चाहते हैं बेस क्लास को वापस करने के लिए, भले ही डेटाबेस में वे वास्तविक बाएं और दाएं वर्ग हों।
OFTYPE एक अच्छा सुझाव था लेकिन यह मेरी सभी संस्थाओं को फ़िल्टर करता है क्योंकि कोई वास्तविक आधार प्रकार नहीं है। लेकिन मैं बेस टाइप ऑब्जेक्ट में बेस बेस मानों को वापस करना चाहता हूं।
कोई विचार?
यह वह जगह है, दुर्भाग्य से, आप की तुलना में कठिन हो सकता है कम से कम LINQ से इकाइयों में उम्मीद है। इकाई एसक्यूएल में आप 'OFTYPE (केवल ...)' का उपयोग कर सकते हैं। एलेक्स जेम्स बताते हैं कि यह कैसे करें [इस टिप में] (http://blogs.msdn.com/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspx "युक्ति 35 - ऑफ टाइप टाइप कैसे करें <TENTITY>() ")। –