मैं एक तालिका स्तंभ के साथ PersonTable
कहा जाता है: PersonId, RestarauntId, Age
दृश्य से चयन करते समय इकाई ढांचा एक सबक्वायरी क्यों बनाता है?
मैं एक दृश्य PersonView
कहा जाता है कि करता है:
select PersonId,
RestarauntId,
RestarauntName(RestarauntId) as `RestarauntName`,
Age
FROM PersonTable
जब मैं के रूप में सरल कुछ करना:
var persons = context.PersonView.Where(x=>x.PersonId == 1)
.Select(x=>
new {x.PersonId,
x.RestarauntId,
x.RestarauntName,
x.Age });
ऊपर 1 रिकॉर्ड देता है और मैं माइस्क्ल क्वेरी होने की अपेक्षा करता हूं:
SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView
WHERE PersonId = 1
लेकिन इसके बजाय, यह उत्पन्न करता है निम्नलिखित:
SELECT 1 AS `C1`, T.PersonId, T.RestarauntId, T.RestarauntName, T.Age
FROM
(SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView) AS T
WHERE T.PersonId = 1
तो यह कोई फर्क नहीं पड़ता कि मैं क्या जहां खंड के पास है, यह हमेशा सभी रिकॉर्ड पहले एक उप चयन में मिल जाएगा। यह तब होता है जब मैं उस दृश्य के खिलाफ पूछता हूं जिसे मुझे चाहिए, लेकिन मैं उत्सुक था कि यह उपर्युक्त क्वेरी क्यों बनाता है जिसके बजाय मैं इसे बनाने की अपेक्षा करता हूं? क्या यह एक इकाई फ्रेमवर्क मुद्दा या एक MySQL समस्या है?
पर जाएं MySQL एक ही योजना के लिए दोनों प्रश्नों को अनुकूलित करने में सक्षम नहीं है? शायद अंतर रनटाइम पर कोई फर्क नहीं पड़ता। – usr
http://stackoverflow.com/questions/12690775/why-ef-generating-a-sub-query-for-a-simle-query –
मुझे नहीं पता कि यह मदद करता है, लेकिन ईएफ महत्वपूर्ण जानकारी का उपयोग नहीं करेगा या तो शामिल प्रकारों को निर्धारित करने के लिए विचारों पर। यह केवल टेबल पर एक आंतरिक जुड़ने का उपयोग करता है, विचारों पर कभी नहीं। – Brannon