تكرار السؤال: …
الإجابة المختصرة
لأنه يفشل في الخوادم المتعددة المتزامنة مسبباً تعارض أقفال وقد يسقط التطبيق؛ وMigration Bundles هي ملف تنفيذي مستقل يُشغل في خطوط الـ CI/CD قبل نشر الكود.
الشرح
إذا كان لديك 10 نسخ من تطبيقك تقلع معاً في Kubernetes واستدعت جميعها db.Database.Migrate()، ستحاول جميعها تعديل جدول المخطط في نفس اللحظة، مما يسبب أقفالاً ميتة أو فشل الإقلاع بالكامل. الممارسة الاحترافية في DevOps هي إنشاء Migration Bundle ملف تنفيذي مستقل عبر dotnet ef migrations bundle وتشغيله كخطوة منفصلة مسبقة في خط النشر قبل تشغيل الحاويات الجديدة.
مثال بالكود
# Build a self-contained executable from the migrations (in CI)
dotnet ef migrations bundle --output efbundle --self-contained -r linux-x64
# Run it as a deployment step, once, before the new version starts
./efbundle --connection "Host=db;Database=app;Username=migrator;Password=$MIGRATOR_PASSWORD"
// Avoid this at start-up: with several instances booting together the migrations race each other
// await db.Database.MigrateAsync();أخطاء شائعة
- تشغيل الترحيلات التلقائية أثناء استقبال زيارات حقيقية للمستخدمين دون التحقق من التوافق الخلفي للجداول.