انتقل إلى المحتوى

قاعدة البيانات — الترحيلات

ما هي

يُدار مخطط ManpowerIQ بواسطة ترحيلات EF Core 878 ملف ترحيل تحت ManpowerIQ.Infrastructure/Migrations/، مع ModelSnapshot بوصفه الحالة-الراهنة القانونية. الترحيلات هي مصدر حقيقة المخطط؛ لا يوجد DDL منفصل مُصان يدويًا.

كيف تعمل

  • تُطبَّق صراحة، لا عند الإقلاع. تُشغَّل الترحيلات بـ dotnet ef database update (مقابل اتصال المالك)؛ الـ API لا يُرحّل-عند-الإقلاع (صُحِّح في المرحلة 3 مقابل دليل التشغيل). تُتعقّب المجموعة المطبّقة في __EFMigrationsHistory.
dotnet ef database update --project src/ManpowerIQ.Infrastructure --startup-project src/ManpowerIQ.API
  • سلسلتا اتصال. تستخدم الترحيلات اتصال المالك (manpoweriq، BYPASSRLS)؛ يستخدم وقت التشغيل manpoweriq_app المربوط بـ RLS. لا يمكن لوقت التشغيل أبدًا تجاوز عزل المستأجر (انظر تعدّد المستأجرين).
  • snake_case بالاصطلاح.UseSnakeCaseNamingConvention()، فيصير C# BusinessUnitIdbusiness_unit_id.
  • RLS يعيش في الترحيلات — 12 ترحيلًا تُشغّل خامًا ENABLE/FORCE ROW LEVEL SECURITY + CREATE POLICY tenant_isolation (قائمة سماح انتقائية للجداول؛ انظر تعدّد المستأجرين).
  • افتراضيات RowVersion — تحتاج أعمدة rowversion من نوع bytea افتراضًا من جانب Postgres '\x'::bytea؛ توجد جولة من ترحيلات "RowVersionDefault" لأن مسارات الإدراج الأقدم فشلت بدونه (حالات حافة الورقة 01).
  • مخطط Hangfire يُثبَّت منفصلًا ببوابة إقلاع (HangfireSchemaBootstrap، PrepareSchemaIfNecessary)، لا بترحيلات EF هذه — تعيش جداوله الـ12 في مخطط hangfire.

واقع إعادة الضبط — إسقاط + إعادة إنشاء

ترحيلات بيانات الزرع ليست عديمة-الأثر مقابل إعادة ضبط من نمط الاقتطاع (PB-025). عدة ترحيلات تُدرج (INSERT) صفوف زرع/مرجعية؛ اقتطاع الجداول (مثل إعادة ضبط Respawn) يترك __EFMigrationsHistory يقول إن الزرع جرى بينما الصفوف غائبة، فلا يُعيد الزرع الإدراج. لذا فإن إعادة الضبط المدعومة هي إسقاط + إعادة إنشاء، لا اقتطاع (دليل التشغيل §4a / §11):

dotnet ef database drop -f --project src/ManpowerIQ.Infrastructure --startup-project src/ManpowerIQ.API
dotnet ef database update --project src/ManpowerIQ.Infrastructure --startup-project src/ManpowerIQ.API

علامة فارقة على الحالة المكسورة: POST /api/auth/login-dev يُعيد 401 Unknown user وأعداد صفوف §4b تقرأ صفرًا — زرع المستخدم التجريبي مفقود لأن المخطط اقتُطع لا أُسقط (تحذير دليل التشغيل §4a).

مزالق / قيود

  • لا تعتمد على الاقتطاع لإعادة الضبط — استخدم إسقاط + إعادة إنشاء، وإلا فلن يُستعاد خط أساس الزرع (PB-025).
  • لا ترحيل-عند-الإقلاع — طبّق الترحيلات صراحة قبل تشغيل الـ API؛ يفترض التطبيق أن المخطط بالفعل عند HEAD.
  • توجد ترحيلات-تنازلية لكن مسار إعادة الضبط هو إسقاط+إعادة إنشاء — عامِل Down() كنقيض بنيوي للمراجعة، لا كآلية إعادة الضبط اليومية.
  • __EFMigrationsHistory هو المرجع بشأن المطبّق — عدم التطابق بينه وبين الصفوف الفعلية هو توقيع PB-025.
  • يُستعاد تلف مخطط Hangfire يدويًا (DROP SCHEMA hangfire CASCADE; → تُعيد البوابة التثبيت)، وهو مقصود ألا يُؤتمت لتبقى العمليات المدمّرة صريحة-للمشغّل (دليل التشغيل §5).

حالة البناء

متاح — 78 ترحيلًا مطبّقًا عبر EF؛ إعادة ضبط إسقاط+إعادة إنشاء هي سير العمل المحلي الموثّق.

ذو صلة