في 4 ديسمبر ، تم إصدار النسخة النهائية من EF Core 2.2. تم إصداره بالتوازي مع ASP.NET Core 2.2 و .NET Core 2.2 وهو أحدث إصدار من تقنية المصادر المفتوحة وعبر النظام الأساسي لإدارة التعيينات بين كائنات اللغة وقاعدة البيانات.
يحتوي EF Core 2.2 RTM على أكثر من مائة إصلاح والعديد من الميزات الجديدة ، والتي سنتحدث عنها في هذه المقالة.
الروابط تؤدي إلى مقالات مماثلة عن حبري. هذه هي المادة الأخيرة من السلسلة. في المرة القادمة سوف نتحدث عن إصدار جديد - وسيكون في العام الجديد.

البيانات المكانية
يتم استخدام البيانات المكانية لتخزين الموقع الفعلي وشكل الكائنات. تحتوي العديد من قواعد البيانات الموجودة على طرق مضمّنة لتخزين وفهرسة واسترجاع هذه البيانات. تبحث سيناريوهات الاستخدام الرئيسية عن كائنات على مسافة محددة وتتحقق من أن بعض المضلعات تحتوي على نقطة معينة. سيكون بإمكان EF Core 2.2 الآن العمل مع قواعد البيانات والبيانات الجغرافية الخاصة بها ، وذلك باستخدام أنواع من مكتبة NetTopologySuite (NTS).
يتم تطبيق البيانات المكانية كمجموعات من حزم الامتدادات لمقدمي الخدمات الخاصة. تضيف كل حزمة من هذه الحزم كلا من التعيينات الجديدة لأنواع وطرق NTS ، والأنواع والوظائف المكانية المقابلة في قاعدة البيانات. تم بالفعل تطبيق ملحقات الموفرات هذه على SQL Server و SQLite و PostgreSQL (بفضل مشروع Npgsql). يمكن استخدام الأنواع المكانية مباشرةً ، جنبًا إلى جنب مع موفر الذاكرة EF Core ، دون استخدام أي ملحقات أخرى.
بمجرد تثبيت الامتداد ، يتم تضمين دعم الأنواع الجديدة. يمكن استخدام الخصائص التي تحتوي على هذه الأنواع في كياناتها ، على سبيل المثال:
using NetTopologySuite.Geometries; namespace MyApp { public class Friend { [Key] public string Name { get; set; } [Required] public Point Location { get; set; } } }
بالطبع ، يمكنك الآن حفظ هذه البيانات:
using (var context = new MyDbContext()) { context.Add( new Friend { Name = "Bill", Location = new Point(-122.34877, 47.6233355) {SRID = 4326 } }); context.SaveChanges(); }
وبالمثل ، يصبح من الممكن إجراء استعلامات في قاعدة البيانات التي تتضمن بيانات وعمليات مكانية:
var nearestFriends = (from f in context.Friends orderby f.Location.Distance(myLocation) descending select f).Take(5).ToList();
البيانات المكانية هي موضوع كبير يجب أن تبدأ بالوثائق الرسمية .
مجموعات من الكيانات التابعة
يقدم EF Core 2.0 القدرة على نمذجة العلاقات الفردية. تقوم EF Core 2.2 بتوسيع هذه الميزة مع القدرة على الإشارة بشكل مباشر إلى من هو الكيان الرئيسي (المالك) ومن الذي يعتمد (مملوك) في هذا الصدد. هذا يسمح لك بتحديد وتوضيح نطاق الكيان.
على سبيل المثال ، الكيانات التابعة:
- يمكن استخدامها فقط في الخصائص المرجعية ( الإنجليزية "خاصية التنقل" ) الموجودة في أنواع أخرى من الكيانات ؛
- يتم تحميلها وتعقبها تلقائيًا في
DbContext
فقط مع كيانها الرئيسي.
في قواعد البيانات العلائقية ، لا يتم عرض المجموعات التابعة في جدول الكيان الرئيسي ، ولكن في جداول منفصلة ، على غرار العلاقات الفردية العادية. في قواعد البيانات الموجهة للمستندات ، كل شيء مختلف إلى حد ما ، ونخطط لتضمين كيانات تابعة (في مجموعات أو روابط تابعة) في نفس المستند الذي تم تخزين الكيان الرئيسي فيه.
يمكنك استخدام الميزة عن طريق استدعاء واجهة برمجة تطبيقات OwnsMany()
الجديدة:
modelBuilder.Entity<Customer>().OwnsMany(c => c.Addresses);
لمزيد من المعلومات ، راجع الوثائق .
تهدف هذه الميزة إلى تبسيط مهمة العثور على اتصال بين استعلامات LINQ في التعليمات البرمجية واستعلامات SQL التي تم إنشاؤها منها ، والتي يمكن العثور عليها في السجلات.
لتمكين العلامات ، قم بتعليق استعلام LINQ باستخدام طريقة TagWith()
الجديدة. لنعدِّل المثال السابق من قسم البيانات المكانية قليلاً:
var nearestFriends = (from f in context.Friends.TagWith(@"This is my spatial query!") orderby f.Location.Distance(myLocation) descending select f).Take(5).ToList();
يمكنك رؤية النص التالي في السجل:
-- This is my spatial query! SELECT TOP(@__p_1) [f].[Name], [f].[Location] FROM [Friends] AS [f] ORDER BY [f].[Location].STDistance(@__myLocation_0) DESC
كما هو الحال دائمًا ، هناك [قسم في الوثائق] حول هذا الموضوع.
متوافق مع EF Core 2.1
لقد أمضينا الكثير من الوقت والجهد في ضمان التوافق العكسي لـ EF Core 2.2 مع موفري EF Core 2.1 الحاليين وجعله حتى يتم تجميع التطبيق بعد تحديثه دون مشاكل مرئية. على الأرجح ، في معظم الحالات ، ستكون الهجرة إلى الإصدار الجديد بسيطة ، ولكن مع ذلك ، إذا واجهت مشكلات فجأة ، فإن الأمر يستحق التحدث عنها في برنامج bugtracker الخاص بنا .
في الوقت الحالي ، هناك تغيير واحد فقط قد يتطلب تغييرات صغيرة في رمز التطبيق. يمكنك أن تقرأ عنها في وصف التذكرة التالية:
نعتزم الاستمرار في الحفاظ على قائمة المشكلات التي تتطلب تعديل الشفرة القديمة وتحديثها.
ما هو التالي: EF Core 3.0
بعد إصدار الإصدار 2.2 ، هدفنا التالي هو EF Core 3.0. لم ننفذ بعد أي ميزات جديدة ، لذا فإن حزم NuGet التي تم إصدارها في 4 ديسمبر تحتوي فقط على بعض التغييرات الصغيرة التي تم إجراؤها بعد إصدار EF Core 2.2.
هناك بالفعل العديد من الأفكار الكبيرة التي نوقشت على نطاق واسع للإصدار التالي. نريد التحدث عنها في الإصدارات الإخبارية المستقبلية ، ولكن فيما يلي بعض المواضيع التي يمكنك قول شيء عنها بالفعل:
تحسينات في LINQ . يتيح لك LINQ كتابة استعلامات قاعدة البيانات دون الحاجة إلى التبديل من لغتك الأساسية إلى لغة قاعدة البيانات ، وذلك باستخدام معلومات الكتابة لعرض التحسس الذكي والتحقق من صحتها في وقت الترجمة. ولكن هذا يعني أيضًا أن LINQ يسمح لك بكتابة عدد غير محدود من الاستعلامات المعقدة ، والتي كانت دائمًا تمثل تحديًا حقيقيًا لموفري LINQ. في الإصدارات الأولى من EF Core ، قمنا بحل هذه المشكلة عن طريق تحديد أجزاء الطلب التي يمكن ترجمتها إلى SQL ، ثم السماح بتنفيذ بقية الطلب مباشرة على العميل ، باستخدام ذاكرة هذا العميل. قد يكون هذا التنفيذ من جانب العميل مفيدًا في بعض الأحيان ، ولكن في كثير من الحالات يؤدي إلى طلبات غير فعالة للغاية لا يمكن العثور عليها حتى يتم تشغيل الرمز. يريد EF Core 3.0 القيام بعمل شامل لتغيير LINQ الداخلي وكيفية اختباره. من الضروري جعلها أكثر متانة وموثوقية (على سبيل المثال ، حتى لا تنقطع الطلبات بعد إصدار إصدارات تصحيح جديدة) ؛ تنفيذ الترجمة الصحيحة في SQL لعدد أكبر من التعبيرات ؛ التركيز على إنشاء استعلامات من شأنها أن تعمل بكفاءة أكبر في المزيد من الحالات ؛ للنظر في أن الطلبات غير الفعالة لا تمر مرور الكرام.
كوزموس DB الدعم . نواصل العمل على مزود Cosmos DB لـ EF Core حتى يتمكن المطورين الذين لديهم دراية بنموذج البرمجة EF من استهداف Azure Cosmos DB على الفور كقاعدة رئيسية لهم. يكمن التحدي في الاستفادة من أفضل ما في Cosmos DB ، مثل التوزيع العالمي ، والتوافر "دائمًا" ، وقابلية التوسع المرنة ، والكمون المنخفض ، وما إلى ذلك. يجب أن يوفر موفر EF Core معظم الميزات المتوفرة. بدأنا القيام بذلك قبل وقت طويل من EF Core 2.2 ، وأصدرنا حتى بعض الإصدارات الأولية . سنستمر في تطوير المزود بالتوازي مع EF Core 3.0.
دعم ل C # 8.0 . يحتوي C # 8.0 على بعض الميزات الجديدة المفيدة مثل التدفقات غير المتزامنة (بما في ذلك await foreach
) وأنواع المراجع الفارغة التي يدعمها EF Core.
عكس قاعدة البيانات إلى أنواع الاستعلام . يضيف EF Core 2.1 دعمًا لأنواع الاستعلام التي تمثل البيانات التي يمكن قراءتها من قاعدة البيانات ولكن لا يمكن تحديثها. تعتبر رائعة بالنسبة لنماذج العرض في قواعد بيانات SQL ، ولذا يريد EF Core 3.0 أتمتة إنشائها.
الكيانات حقيبة الممتلكات . يؤدي ذلك إلى إضافة كيانات تخزن البيانات ليس في خصائص عادية ، ولكن في الخصائص المفهرسة ، ويمكنها استخدام مثيلات من نفس الفئة في .NET (على سبيل المثال ، شيء مثل Dictionary<string, object>
) لعرض العديد من أنواع العناصر المختلفة في أحدها ونفس نموذج EF الأساسية. هذه الميزة هي الخطوة التالية على طريق العلاقات الكاملة بين العديد من الأطراف دون استخدام كيانات موحدة - أي واحدة من أكثر الميزات المتوقعة من EF Core.
EF 6.3 على . NET الأساسية . من الواضح أن هناك الآن العديد من التطبيقات التي تستخدم EF ، ونقلها إلى EF Core فقط للحصول على بعض الفوائد من استخدام .NET Core يتطلب أحيانًا الكثير من الجهد. لذلك ، سوف نقوم بتكييف الإصدار التالي من EF 6 بحيث يبدأ أيضًا العمل على .NET Core 3.0. هذا هو تشجيع المطورين على نقل تطبيقاتهم بحيث يتعين عليهم تغيير الكود الأقل قدر الإمكان. بالطبع ، سيؤدي ذلك إلى عدد من القيود (على سبيل المثال ، سوف تكون هناك حاجة لموفرين جدد ولن يتم تمكين دعم البيانات المكانية لـ SQL Server). بالإضافة إلى ذلك ، لا نخطط لإضافة أي ميزات إضافية إلى EF 6.
الخاتمة
يشكر فريق EF المجتمع على ردود الفعل الجيدة والمساعدة الإنمائية التي أدت في النهاية إلى تقديم EF Core 2.2. كما هو الحال دائمًا ، نذكرك بأنه يمكن إضافة ishshui الجديد مباشرةً إلى متعقبنا. شكرا لك
لا تنس أن سعر تذاكر DotNext من 1 يناير سيرتفع. الشخصية - لألف ، والمعيار - لمدة ألفي. تفاصيل حول إيرلي بيرد موجودة على الموقع .