Pomelo.entityframeworkcore.mysql: استدعاء Scaffold ServerVersion ()

تم إنشاؤها على ٢٢ نوفمبر ٢٠١٩  ·  3تعليقات  ·  مصدر: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

لا نقوم حاليًا بوضع السقالات على ServerVersion الذي يستخدمه خادم قاعدة البيانات.

من خلال التطبيقات المختلفة لخوادم قواعد البيانات المتوافقة مع MySQL هناك وما زال هناك تطور كبير على جانب الميزات في MySQL ، فإننا نستخدم عبارات محددة لإصدار الخادم في أجزاء كثيرة من مزود Pomelo.

على الرغم من أنه يجب على المستخدمين دائمًا تحديد إصدار الخادم المتوقع (أو الحد الأدنى من الدعم) عند إعداد DbContext ، فإن العديد من المستخدمين لا يدركون ذلك ، وبالتالي يستخدمون إصدار الخادم الافتراضي ، وهو الأحدث.

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

ستكون هذه هي الخطوة الأولى نحو جعل تعيين إصدار الخادم بشكل صريح إلزاميًا عند إعداد DbContext لـ Pomelo.

يجب أن يكون مكافئًا وظيفيًا لـ # 932 PR الذي تم إلغاؤه.

/ ccajcvickers ،roji

type-enhancement

ال 3 كومينتر

لاحظ أنه إذا كنت تريد أن تتأثر الخدمات الفردية بالإصدار (على سبيل المثال ، TypeMappingSource ، QuerySqlGenerator) ، فما لم أكن مخطئًا لن يكون التعليق التوضيحي النموذجي كافياً - فستحتاج إلى شيء يرث ISingletonOptions. سيؤدي هذا إلى إنشاء مزود خدمة جديد من أجل مختلف ، والحصول على مثيل مختلف لكل خدمة فردية. يمكنك إلقاء نظرة على كيفية قيام Npgsql بهذا في NpgsqlOptions ، والتي توسع ISingletonOptions (أو CosmosSingletonOptions في EF Core). ajcvickers يمكنه تأكيد أنني لم أقل شيئًا سخيفًا.

IIRC للأسف ليس لدينا آلية لدعم خيارات سياق db ، وهي الطريقة التي سيتم بها تنفيذ الإصدار. لا يوجد وقت للعثور على مشكلة التتبع في الوقت الحالي ، ولكن بإمكان bricelam التأكيد.

أعتقد أننا طبقناها بطريقة مماثلة في # 961 ، حيث قرأنا إصدار الخادم من الاتصال قبل السقالات مباشرةً ، ثم حفظناها كملكية IMySqlOptions (عبر امتدادنا الرسمي DbContextBuilder الطريقة ServerVersion() ) واستدعاء Initialize() طالما لم يتم إعدادها بالفعل لسبب ما.

ثم نستخدم ProviderCodeGenerator.GenerateProviderOptions() لإنشاء رمز طريقة التمديد ServerVersion() .

لذلك لم نذهب إلى مسار الشرح النموذجي الذي جربناه في # 932 PR الذي تم إلغاؤه بعد الآن. لكننا نتأكد مع هذا PR ، من أننا نقدم نفس الوظيفة التي أردنا توفيرها مع # 932 ، ولكن هذه المرة فقط نعيد استخدام طريقة الامتداد ServerVersion() الموجودة بالفعل.

نحن بحاجة إلى تدفق النموذج (أو مجرد تعليقاته التوضيحية) في طريقة سقالات الموفر. تتبعها https://github.com/aspnet/EntityFrameworkCore/issues/10487

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات