में लीकी अबास्ट्रक्शन मुझे कुछ डीबीएमएल जेनरेटेड क्लास के साथ समस्या हो रही है जो कुशल SQL को हल नहीं करते हैं। कल्पना करें कि मेरे पास एक खाता तालिका और एक लेनदेन तालिका है जहां प्रत्येक लेनदेन किसी विशेष खाते से जुड़ा होता है। मैं इसे सब डीबीएमएल में लोड करता हूं और बाहर एक खाता वर्ग और एक लेनदेन वर्ग पॉप करता है। खाता वर्ग में लेनदेन के संग्रह के लिए एक EntitySet संदर्भ है जो उस खाते के सभी लेन-देन का प्रतिनिधित्व करता है। काफी उचित।LINQ से SQL EntitySet
अब मान लीजिए कि मैं केवल वर्तमान लेखांकन अवधि के लिए लेनदेन चाहता हूं। तो मैं इस तरह एक पद्धति जोड़ें:
public IEnumerable<Transaction> CurrentTransactions
{
get
{
DateTime dtStart = CurrentPeriod;
DateTime dtEnd = NextPeriod;
return
from t in Transactions
orderby t.date
where t.date >= CurrentPeriod && t.date <= NextPeriod
select t;
}
}
अच्छा लग रहा है और यह काम करता है, लेकिन SQL अच्छा नहीं है:
SELECT [t0].[id], [t0].[account_id], [t0].[date], [t0].[description], [t0].[amount], [t0].[sign]
FROM [dbo].[transactions] AS [t0]
WHERE [t0].[account_id] = @p0
Ie: यह LINQ के साथ नीचे लेन-देन के पूरे सेट खींच रहा है और हम इसे संसाधित है ऑब्जेक्ट्स के लिए। मैंने कॉन्स्टेंट्स के साथ तारीखों को प्रतिस्थापित करने के लिए, जहां ऑर्डर क्लॉज, ऑर्डरबी क्लॉज को निकालने का प्रयास किया है, यह अभी भी क्लाइंट पक्ष है।
तुलना के लिए, मैं डेटा संदर्भ बंद सीधे लेनदेन संग्रह कॉल करने की कोशिश:
DateTime dtStart = account.CurrentPeriod;
DateTime dtEnd = account.NextPeriod;
IEnumerable<Transaction> trans=
from t in MyDataContext.Transactions
orderby t.date
where t.date >= dtStart && t.date <= dtEnd && t.account_id==iAccountID
select t;
और यह खूबसूरती से काम करता है:
SELECT [t0].[id], [t0].[account_id], [t0].[date], [t0].[description], [t0].[amount], [t0].[sign]
FROM [dbo].[transactions] AS [t0]
WHERE ([t0].[date] >= @p0) AND ([t0].[date] <= @p1) AND ([t0].[account_id] = @p2)
ORDER BY [t0].[date]
सब के बाद
तो, मैं दो प्रश्न हैं:
- क्या लेनदेन इकाई का उपरोक्त व्यवहार सही है और/या इसे ठीक करने का कोई तरीका है?
- मैं अपने खाता वर्ग पर उपरोक्त "फिक्स" को कैसे कार्यान्वित कर सकता हूं। डीबीएमएल द्वारा उत्पन्न इकाई वर्गों को डेटाकॉन्टेक्स्ट तक पहुंच नहीं है।
कम से कम 200 9 से अब तक इकाई फ्रेमवर्क के संग्रह गुण, ऑब्जेक्टिव 'प्रकार के प्रकार नहीं हैं, लेकिन' EntityCollection 'टाइप करें (हालांकि, उनके पास उन्हें 'ऑब्जेक्टक्चर ') में बदलने की विधि है। –