.net - ماهي - إطار الكيان مقابل LINQ إلى SQL




ماهي تقنية entity framework (12)

الآن تم إصدار .NET v3.5 SP1 (مع VS2008 SP1) ، لدينا الآن إمكانية الوصول إلى إطار عمل .NET framework.

سؤالي هو هذا. عند محاولة تحديد ما بين استخدام Entity Framework و LINQ إلى SQL كمرجع ORM ، ما الفرق؟

الطريقة التي أفهمها ، إطار الكيان (عند استخدامها مع LINQ إلى الكيانات) هو "الأخ الأكبر" ل LINQ إلى SQL؟ إذا كان هذا هو الحال - ما هي مزاياها؟ ماذا يمكن أن تفعل ذلك LINQ إلى SQL لا تستطيع أن تفعل من تلقاء نفسها؟


ينق إلى SQL

فمن مزود أنه يدعم SQL Server فقط. إنها تقنية تعيين لتعيين جداول قاعدة بيانات SQL Server إلى كائنات .NET. هي أول محاولة لـ Microsoft في ORM - مخطط كائن Relational.

ينق إلى الكيانات

هي نفس الفكرة ، ولكن باستخدام Entity Framework في الخلفية ، مثل ORM - مرة أخرى من Microsoft ، وهي تدعم ميزة قاعدة البيانات الرئيسية المتعددة لإطار عمل الكيان ، فالمطور يمكن أن يعمل على أي قاعدة بيانات لا يحتاج إلى تعلم بناء الجملة لأداء أي عملية على قواعد بيانات مختلفة

وفقا لتجربتي الشخصية EF هو أفضل (إذا لم يكن لديك أي فكرة عن SQL) الأداء في LINQ أسرع قليلا مقارنة مع EF سبب LINQ لغة مكتوبة في لامدا.


LINQ إلى SQL

  1. مصدر بيانات متجانس: SQL Server
  2. موصى به للمشاريع الصغيرة فقط حيث تم تصميم بنية البيانات بشكل جيد
  3. يمكن تغيير التعيين دون recompilling مع SqlMetal.exe
  4. .dbml (لغة ترميز قواعد البيانات)
  5. تعيين رأس برأس بين الجداول والفئات
  6. يدعم وراثة TPH
  7. لا يدعم أنواع معقدة
  8. نهج التخزين الأول
  9. عرض قاعدة البيانات مركزية لقاعدة البيانات
  10. تم إنشاؤها بواسطة فريق C #
  11. دعم ولكن لا مزيد من التحسينات المقصود

إطار كيان

  1. Heterogeneus datasource: دعم العديد من مزودي البيانات
  2. موصى به لجميع المشاريع الجديدة باستثناء:
    • صغيرة (LINQ إلى SQL)
    • عندما يكون مصدر البيانات ملف مسطح (ADO.NET)
  3. يمكن تغيير التعيين دون إعادة الضبط عند تعيين نموذج وملفات التعيينات عملية القطع الأولية للبيانات إلى نسخ إلى دليل الإخراج
  4. .edmx (نموذج بيانات الكيان) الذي يحتوي على:
    • SSDL (لغة تعريف مخطط التخزين)
    • CSDL (لغة تعريف المفهوم المخطط)
    • MSL (لغة مواصفات الخرائط)
  5. واحد إلى واحد أو واحد إلى أطراف العديد من التعيينات بين الجداول والفئات
  6. يدعم الإرث:
    • TPH (جدول في التسلسل الهرمي)
    • TPT (جدول لكل نوع)
    • TPC (الجدول حسب فئة الخرسانة)
  7. يدعم أنواع معقدة
  8. الطريقة الأولى ، النموذج الأول ، نُهج التخزين أولاً
  9. عرض مركزية التطبيق من قاعدة البيانات
  10. تم إنشاؤها بواسطة فريق SQL Server
  11. مستقبل واجهات برمجة تطبيقات بيانات Microsoft

أنظر أيضا:


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

Linq2Sql يمكن أن تكون متحالفة جيدة ، وذلك باستخدامه مع LinQ يطلق العنان توقيت النامية العظيم.


أعمل مع العميل الذي يحتوي على مشروع كبير يستخدم Linq-to-SQL. عندما بدأ المشروع كان الخيار الواضح ، لأن Entity Framework كان يفتقر إلى بعض الميزات الرئيسية في ذلك الوقت وكان أداء Linq-to-SQL أكثر سرعة.

لقد تطورت EF الآن وتفتقر شركة Linq-to-SQL إلى ميزة رئيسية لخدمات قابلة للتحجيم بشكل كبير ، وهذا هو الدعم لعمليات التزامن. لدينا أكثر من 100 طلب في الثانية في بعض الأحيان ، وعلى الرغم من أننا قمنا بتحسين قواعد البيانات الخاصة بنا ، إلا أن معظم الاستفسارات تستغرق عدة ميلي ثانية لإكمالها. نظرًا لاستدعاءات قاعدة البيانات المتزامنة ، يتم حظر مؤشر الترابط ولا يتوفر للطلبات الأخرى.

نحن نفكر في التبديل إلى Entity Framework ، فقط لهذه الميزة. من المؤسف أن Microsoft لم تقم بتطبيق الدعم المتزامن في Linq-to-SQL (أو من مصدر مفتوح ، لذلك يمكن للمجتمع القيام بذلك).


انطباعي هو أن قاعدة البيانات الخاصة بك جميلة للغاية أو سيئة للغاية إذا كان Linq2Sql لا تناسب احتياجاتك. لدي حوالي 10 مواقع على حد سواء أكبر وأصغر باستخدام Linq2Sql. لقد نظرت والإطار الكيان عدة مرات ولكن لا أجد سببا جيدا لاستخدامه على Linq2Sql. قال أن أحاول استخدام قواعد البيانات الخاصة بي كنموذج لذلك لدي بالفعل 1 إلى 1 بين النموذج وقاعدة البيانات.

في وظيفتي الحالية لدينا قاعدة بيانات مع 200+ الجداول. قاعدة بيانات قديمة تحتوي على الكثير من الحلول السيئة لذلك يمكنني رؤية ميزة Entity Framework على Linq2Sql لكن ما زلت أفضّل إعادة تصميم قاعدة البيانات لأن قاعدة البيانات هي محرك التطبيق وإذا كانت قاعدة البيانات مصممة بشكل سيئ وبطيء ثم تطبيقي سيكون بطيئا أيضا. إن استخدام إطار الكيان في قاعدة بيانات كهذه يبدو كأنه إصلاح سريع لإخفاء النموذج السيئ ، لكنه لا يمكن أن يخفي الأداء السيئ الذي تحصل عليه من قاعدة البيانات هذه.


تبدو LINQ إلى SQL و Entity Framework مشابهة على السطح. كلاهما يوفر LINQ الاستعلام مقابل قاعدة بيانات باستخدام نموذج بيانات.

تطورت LINQ إلى SQL من مشروع LINQ ، الذي خرج من فريق العمل مع تطوير اللغة. في حين كان إطار الكيان مشروعًا لفريق برمجة البيانات وكان يركز على لغة كيان SQL. لم تعتمد Microsoft أية نية لتصدير LINQ إلى SQL.

لا يزال LINQ إلى SQL جزءًا من ADO.NET بينما يحتوي Entity framework على واجهة برمجة تطبيقات منفصلة. إطار الكيان هو الإصدار الأعلى من LINQ إلى SQL.Entity Framework يستخدم نموذج بيانات الكيان لسد ما بين تطبيقك ومخزن البيانات. هو نموذج بيانات الكيان ، أو EDM ، الذي يوفر تعريف مخططك المفاهيمي بالإضافة إلى معلومات مخطط قاعدة البيانات اللازمة للتفاعل مع قاعدة البيانات وأخيرًا مخطط تعيين يربط بين اثنين.

فيما يلي بعض المهام التي تم تنفيذها بواسطة Entity Framework (Entity data model).

• يولد تلقائيا فئات من النموذج ويقوم بتحديث هذه الفئات بشكل حيوي في أي وقت يتغير النموذج.

• يهتم بكل اتصال قاعدة البيانات بحيث لا يتحمل المطورون عن طريق كتابة الكثير من التعليمات البرمجية للتفاعل مع قاعدة البيانات.

• يوفر بناء جملة استعلام شائع للاستعلام عن النموذج ، وليس قاعدة البيانات ، ثم يترجم هذه الاستعلامات إلى استعلامات يمكن أن تفهمها قاعدة البيانات.

• يوفر آلية لتتبع التغييرات على كائنات النموذج حيث يتم استخدامها في التطبيقات ويعالج التحديثات لقاعدة البيانات.


لا يدعم حتى الآن أنواع بيانات SQL 2008 الفريدة. الاختلاف من وجهة نظري هو أن الكيان لا يزال لديه فرصة لبناء نموذج حول نوعي الجغرافي في بعض الإصدارات المستقبلية ، و Linq إلى SQL ، يتم التخلي عنها ، ولن.

أتساءل ما الأمر مع nybernate ، أو OpenAccess ...


لقد وجدت أنني لا يمكن استخدام قواعد بيانات متعددة داخل نفس نموذج قاعدة البيانات عند استخدام EF. ولكن في linq2sql يمكنني فقط عن طريق بادئة أسماء المخطط مع أسماء قواعد البيانات.

كان هذا أحد الأسباب التي بدأت في الأصل العمل مع linq2sql. لا أعلم ما إذا كانت EF قد سمحت بعد هذه الوظيفة ، لكني أتذكر أنني قررت أنها لا تسمح بذلك.


هناك عدد من الاختلافات الواضحة الموضحة في هذه المقالة @ lars المنشورة ، لكن الإجابة المختصرة هي:

  • يقترن L2S بإحكام - خاصية الكائن إلى حقل معين من قاعدة البيانات أو بشكل صحيح تعيين كائن إلى مخطط قاعدة بيانات محدد
  • سوف تعمل L2S فقط مع مزود خدمة (بقدر ما أعرف)
  • يسمح EF بتعيين فئة واحدة إلى جداول متعددة
  • سوف تتعامل EF مع علاقات MM
  • سيكون لدى EF القدرة على استهداف أي موفر بيانات ADO.NET

كان الافتراض الأصلي L2S هو لـ Rapid Development و EF لمزيد من تطبيقات "enterprisey" n-tier ، إلا أن بيع L2S قصير بعض الشيء.


وقد غطت الإجابات هنا العديد من الاختلافات بين Linq2Sql و EF ، ولكن هناك نقطة رئيسية لم تحظ باهتمام كبير: Linq2Sql يدعم SQL Server فقط بينما لدى EF موفري RDBMS التالية:

مقدمة من Microsoft:

  • ADO.NET السائقين ل SQL Server ، OBDC و OLE DB

عبر مزودي الطرف الثالث:

  • الخلية
  • وحي
  • DB2
  • VistaDB
  • سكليتي
  • كيو
  • ينفورميكس
  • U2
  • سايبيس
  • Synergex
  • فايربيرد
  • Npgsql

على سبيل المثال لا الحصر.

وهذا يجعل EF تجريدًا فعالًا للبرمجة على مخزن البيانات العلائقية ، مما يعني أن المطورين لديهم نموذج برمجة ثابت للعمل مع بغض النظر عن مخزن البيانات الأساسي. قد يكون ذلك مفيدًا للغاية في الحالات التي تقوم فيها بتطوير منتج تريد التأكد من أنه سيتفاعل مع مجموعة واسعة من أجهزة RDBMS الشائعة.

هناك موقف آخر يكون فيه هذا التجريد مفيدًا حيث تكون جزءًا من فريق تطوير يعمل مع عدد من العملاء المختلفين ، أو وحدات أعمال مختلفة داخل المؤسسة ، وترغب في تحسين إنتاجية المطورين من خلال تقليل عدد أجهزة RDBMS التي يجب أن تصبح مألوفة لدعم مجموعة من التطبيقات المختلفة على قمة RDBMS المختلفة.


هل LINQ إلى SQL Truly Dead؟ بواسطة جوناثان آلن لموقع InfoQ.com

يصف مات وارن [LINQ إلى SQL] بأنه شيء "لم يكن يفترض وجوده أبداً." في الأساس ، كان من المفترض أن يكون مجرد مساعد لمساعدتهم على تطوير LINQ حتى يكون ORM الحقيقي جاهزًا.

...

تسبب مقياس "Entity Framework" في فقدان مهلة. NET 3.5 / Visual Studio 2008. اكتمل في الوقت المناسب لسوء الحظ المسمى ". NET 3.5 Service Pack 1" ، الذي كان أشبه إصدار رئيسي من حزمة خدمة.

...

لا يحب المطورون [ADO.NET Entity Framework] بسبب التعقيد.

...

اعتبارًا من .NET 4.0 ، سيكون LINQ إلى الكيانات الحل الموصى به للوصول إلى البيانات من أجل LINQ إلى السيناريوهات العلائقية.






linq-to-sql