لماذا لا يُظهر رمز Entity Framework الخاص بي أولاً DbContext الكيانات من الجدول المعبأ؟
-
27-10-2019 - |
سؤال
أحاول نشر تطبيقي في بيئة اختبار ، لكن لا يمكنني جعل Entity Framework يعمل بشكل جيد مع قاعدة البيانات. أثناء التطوير ، أستخدم مُهيئ قاعدة البيانات لبذر قاعدة البيانات وقد نجح ذلك بلا عيب. ومع ذلك ، عندما أقوم بنشر التطبيق على مثيل IIS الفعلي ، لا يمكنني الحصول عليه للتفاعل مع قاعدة البيانات. لا تعمل قواعد التهيئة المخصصة الخاصة بي على الإطلاق ، لذلك أقوم بدلاً من ذلك بإنشاء قاعدة البيانات يدويًا.
لقد استخدمت ObjectContext.CreateDatabaseScript () كنقطة انطلاق لبرنامج SQL النصي الخاص بي ، ويتحقق SSMS من ملء صفين في الجدول المناسب.
تظهر مشكلتي بعد تشغيل التطبيق. لديّ عضوية مخصصة وموفرو دور ، ولا يبدو أن أيًا منهما يكتشف وجود الدورين في قاعدة البيانات.
كيف يمكنني جعل إطار عمل الكيان يتعرف على أن هذه الصفوف ليست فارغة؟ أنا أستخدم حاليًا DbContext خاصًا داخل مستودع للتعامل مع الاتصال مع Entity Framework ، وقمت بتعطيل مُهيئتي المخصصة حتى يتم حل هذه المشكلة.
رمز يحاول العثور على أدوار في قاعدة البيانات: Genacodicetagpre
تعرض قاعدة البيانات ما يلي في جدول الأدوار: Genacodicetagpre
ينشئ LINQ استثناء تسلسل فارغ ، كسياق. الأدوار فارغة
المحلول 2
فيما يلي الخطوات التي اتبعتها للترحيل من مشروع أول رمز مع تنفيذ IDatabaseInitializer مخصص يعيد تعيين قاعدة البيانات أثناء كل جلسة إلى إعداد قاعدة بيانات غير متغير.
أولاً ، انسخ المخطط الذي تم إنشاؤه بواسطة Entity Framework في مطور البرامج الخاص بك. مشروع عن طريق تشغيل الكود التالي ووضع المخرجات في مكان يمكن الوصول إليه (على سبيل المثال: ملف على سطح المكتب ، نص خام في المتصفح ، إلخ). السياق هو مثيل لفصلك يرث من DbContext :
Genacodicetagpreثانيًا ، احفظ السلسلة التي تم إرجاعها من هذا الاستدعاء في ملف SQL. تأكد من إزالة الأمر الذي ينشئ جدول بيانات تعريف Entity Framework. يجب أن يشبه هذا الأمر ما يلي: Genacodicetagpre
بعد ذلك ، قم بإزالة الشفرة التي تشكل مصدر قاعدة البيانات. لقد استخدمت إعداد AppSetting بحيث يمكنني بسهولة تبديل استخدام هذا الرمز بعد النشر دون الحاجة إلى إعادة التجميع والنشر. Genacodicetagpre
خارج هذا البيان مباشرة ، ما زلت بحاجة إلى تهيئة قاعدة البيانات ، ولكن تأكد من تمرير خطأ حتى تتم التهيئة فقط إذا لم تتم تهيئة قاعدة البيانات. Genacodicetagpre
أخيرًا ، قم بتشغيل الإعداد SQL على قاعدة بيانات فارغة لإنشاء الجداول بالحقول المناسبة.
إذا قمت بنشر التطبيق ثم تشغيله ، فيجب أن يتصل بقاعدة البيانات وأن يكون قادرًا على العمل كالمعتاد مع أي بيانات قمت بتحميلها في برنامج نصي خارجي. لقد اختبرت هذه الطريقة بنجاح مع العضوية المخصصة وموفري الأدوار.
نصائح أخرى
بالحكم على التعليقات ، يبدو أنه لا يوجد اتصال بين Entity Framework وقاعدة البيانات.لم تذكر إصدار Entity Framework الذي تستخدمه ولكن أفترض أنك قمت بالتحديث إلى الأحدث (4.3 حتى وقت كتابة هذا التقرير).
لاحظت أنك تقول أنك "تنشئ قاعدة البيانات يدويًا."لماذا لا تفتح مشروعًا تجريبيًا وتنشئ نموذجًا جديدًا لقاعدة بيانات جديدة استنادًا إلى قاعدة البيانات التي تم إنشاؤها يدويًا؟يجب أن يؤكد هذا على الأقل أنه يمكنك استخدام Entity Framework مع التكوين الخاص بك. من هناك سأقوم بإنشاء مشروع آخر من البداية لاختبار منهج Code First.