سؤال

ما مدى سهولة كتابة مزود Linq البكم الذي يمكنه فقط استخدام تعريفات الفئة (التي لا تملك أي مراجع كائن كخصائص) وتعطيني SQL المترجم. يمكن أن تتحمل اسم الخصائص والأعمدة لتكون نفسها وكذلك أسماء الفصول والجداول الأساسية. هل يمكن أن تعطيني بعض المؤشرات.

هل كانت مفيدة؟

المحلول

استغرق الأمر مني حوالي 4 أشهر من العمل بدوام كامل (8 ساعات في اليوم) لبناء مزود عمل مستقر ينفذ المواصفات بالكامل من LINQ. أود أن أقول إنني كان لدي نسخة بسيطة وعربات التي تجرها الدواب وغير مستقر بعد حوالي ثلاثة أسابيع، لذلك إذا كنت تبحث فقط عن شيء خشن، أود أن أقول أنك ربما تنظر إلى أي شيء من أسبوع ما يصل إلى شهرين اعتمادا على مدى جودة جيدة لك هي وأي نوع من المستحقات لديك.

يجب أن أشير إليكم إلى مدونة الضال على ذلك، كتبت مات تجول جيد حقا حول كيفية تنفيذ مزود LinQ، وحتى إذا كنت لن تتمكن من نسخها ولصقها، فسوف تساعدك على الوصول إليها السيطرة مع كيفية التفكير عند العمل. يمكنك أن تجد matt's تجول هنا: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iquerable-provider-part-i.aspx. وبعد أوصي أنك تذهب حول الأمر بنفس الطريقة التي تقوم بها مات، وتوسيع تعبير شجرة الشجرة، ويشمل مات في الجزء الثاني من البرنامج التعليمي له.

أيضا، عندما بدأت العمل مع هذا، كان لدي الكثير من المساعدة من تعبير شجرة التعبير، لقد جعلت حقا تحليل أسهل بكثير بمجرد معرفة كيفية تحليل LINQ للاستعلامات.

بناء مزود هو حقا الكثير من المرح، حتى لو كان محبطا بعض الشيء في بعض الأحيان. وأتمنى لكم كل التوفيق!

نصائح أخرى

إلقاء نظرة على Linqextender. المشروع، عبارة عن مجموعة أدوات لإنشاء مقدمي LinQ مخصص.

هناك خيار آخر لإعطائك ساقه يبدو re-linq. وهو إطار لإنشاء مقدمي LINQ مخصص.

هنا مصدر الرمز لطيفة نظرة عامة (PDF) ما يشارك في كتابة واحدة.

لقد كتبت سلسلة تعليمية على قاعدة مدونتي في تجربتي في تطوير مزود LinQ-To-SQL من نقطة الصفر، بدءا من مرحلة تكوين شجرة التعبير (استدعاء طرق LINQ)، والاستمرار في تعبير الزائر، ويقضي الاستعلام في مكونات، قم بتحليل جملة WHERE، وإنشاء النص والمعلمة، وفي النهاية، قم بتجميع كل شيء في IL باستخدام مساحة اسم التعبير .NET.

لقد رأيت العديد من المشاركات غير المكتملة التي وعدت بشرح كيفية كتابة مزود، حيث سقطت أقل من العلامة، بالكاد تخدش السطح وعدم تقديم أي شيء قابل للتنفيذ عن بعد.

تتمتع سلسلة المدونة التي كتبتها بناء على تجربتي بمشروع عينة متاح للتنزيل باستخدام المزود البسيط الذي يغطي الوظيفة المطلوبة فقط من خلال مثال البرنامج التعليمي. ومع ذلك، فإنه يتضمن أيضا إصدار الإنتاج الذي يدعم عددا من العمليات (حيث، الانضمام، أولا، العد، الأعلى، إلخ)، البيانات الفرعية، البيانات المتداخلة، وما إلى ذلك بالإضافة إلى ذلك، فإنه ينتج SQL منظف أكثر من الكثير مما أنا عليه لقد رأيت من الكيانات و LINQ-TO-SQL. لا يوجد أي تعشيش غير ضروري / غير ضروري، ولف كل شيء بين قوسين وغيرها.

بالنسبة لأي شخص لديه مستوى جيد من التفكير الملخص، فإن تطوير مثل هذا المزود ليس هذه المهمة الصعبة التي وضعها العديد منها. لقد طورت واحدة تستخدم في بيئة الإنتاج في حوالي 3 أشهر من العمل بدوام جزئي (وهذا يعني بعض الأمسيات وعطلات نهاية الأسبوع). من الحصول على الذهاب، كان يهدف إلى الأداء ومرتبة مرتبة في الاعتبار - هدفا تحققه.

كان من الصعب بعض الشيء العثور على الوقت لنشر هذه المواد، لكنني فكرت - إذا كان قد يساعد شخصا ما هناك، فلا يوجد سبب لهذه التجربة للذهاب إلى النفايات:

لقد أنشأت مشروعاlinqtoynehing.والتي تم تصميمها لجعلها من السهل جدا تنفيذ مزود Linq (بسيط).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top