लक्ष्य SQL सर्वर के सबसे कम प्रश्नों LINQ का उपयोग कर गुमनाम प्रकार का उपयोग किए बिना SQL करने के लिए जारी करने के लिए है। विधि के लिए वापसी प्रकार को IList < चाइल्डहोना आवश्यक होगा। रिश्तों इस प्रकार हैं:LINQ से SQL का उपयोग कर लोड भाई डेटा को उत्सुक कैसे करें?
Parent
Child1 Child2
Grandchild1
जनक> Child1 एक-से-अनेक संबंध
Child1> Grandchild1 एक-से-एन संबंध (जहां n अनंत को शून्य है है)
जनक> Child2 एक-से-एन संबंध (जहां n अनंत को शून्य)
मैं एबीएल हूँ है ई माता-पिता, चाइल्ड 1 और ग्रैंडचिल्ड 1 डेटा को उत्सुक करने के लिए उत्सुक है जिसके परिणामस्वरूप SQL सर्वर पर एक क्वेरी है।
लोड विकल्पों के साथ इस क्वेरी के लिए उत्सुक लोड डेटा के सभी, भाई डेटा (Child2) को छोड़कर:
DataLoadOptions loadOptions = new DataLoadOptions();
loadOptions.LoadWith<Child1>(o => o.GrandChild1List);
loadOptions.LoadWith<Child1>(o => o.Parent);
dataContext.LoadOptions = loadOptions;
IQueryable<Child1> children = from child in dataContext.Child1
select child;
मैं भी भाई डेटा लोड करने की जरूरत है। मैंने जिस दृष्टिकोण का प्रयास किया है, वह क्वेरी को दो LINQ से SQL क्वेरीज़ में विभाजित कर रहा है और परिणाम सेट को एक साथ विलय कर रहा है (सुंदर नहीं), हालांकि भाई डेटा तक पहुंचने पर यह आलसी लोड हो जाता है।
भाई लोड विकल्प जोड़ा जा रहा है प्रत्येक Grandchild1 और Child2 रिकार्ड के लिए एसक्यूएल सर्वर के लिए एक क्वेरी जारी करेगा (जो वास्तव में क्या मैं से बचने के लिए कोशिश कर रहा हूँ):
DataLoadOptions loadOptions = new DataLoadOptions();
loadOptions.LoadWith<Child1>(o => o.GrandChild1List);
loadOptions.LoadWith<Child1>(o => o.Parent);
loadOptions.LoadWith<Parent>(o => o.Child2List);
dataContext.LoadOptions = loadOptions;
IQueryable<Child1> children = from child in dataContext.Child1
select child;
exec sp_executesql N'SELECT * FROM [dbo].[Child2] AS [t0]
WHERE [t0].[ForeignKeyToParent] = @p0',N'@p0 int',@p0=1
exec sp_executesql N'SELECT * FROM [dbo].[Child2] AS [t0]
WHERE [t0].[ForeignKeyToParent] = @p0',N'@p0 int',@p0=2
exec sp_executesql N'SELECT * FROM [dbo].[Child2] AS [t0]
WHERE [t0].[ForeignKeyToParent] = @p0',N'@p0 int',@p0=3
exec sp_executesql N'SELECT * FROM [dbo].[Child2] AS [t0]
WHERE [t0].[ForeignKeyToParent] = @p0',N'@p0 int',@p0=4
मैं भी एसक्यूएल प्रश्नों का LINQ लिखा है सभी डेटा में शामिल होने के लिए उम्मीद है कि यह डेटा लोड करने के लिए उत्सुक होगा, हालांकि जब LINQ या SQLchild1 के LINQ से SQL EntitySet को एक्सेस किया जाता है तो यह डेटा को आलसी लोड करता है।
IList < को वापस करने का कारण Child1 > व्यावसायिक वस्तुओं को हाइड्रेट करना है।
- इस समस्या को गलत तरीके से निकट:
मेरे विचार मैं या तो कर रहा हूँ कर रहे हैं।
- संग्रहित प्रक्रिया को कॉल करने का विकल्प है?
- मेरा संगठन LINQ से SQL को ORM के रूप में उपयोग नहीं करना चाहिए?
किसी भी मदद की बहुत सराहना कर रहा है।
धन्यवाद,
स्कॉट
ब्याज से बाहर, क्यों नहीं आप गुमनाम प्रकार या कंटेनर के कुछ प्रकार का उपयोग करना चाहते हैं? – SteadyEddi