ستؤدي إعادة تسمية الكيان إلى إفلات الجدول وإنشاء الجدول بدلاً من إعادة تسميته فقط.
هذا هو قيد متأصل في EF ، وليس بوميلو مباشرة. لا تستطيع EF عادةً التمييز بين إسقاط / إنشاء جدول وإعادة تسمية.
الحيلة لإخباره بأنه إعادة تسمية هي تعيين اسم الجدول يدويًا ، إما عبر سمة في فئة الكيان ، أو عبر واجهة برمجة تطبيقات OnModelCreating بطلاقة.
التسلسل مثل:
على سبيل المثال ، builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
توليد الهجرة. سيؤدي هذا إلى إنشاء ترحيل جدول إعادة التسمية الصحيح للكيان.
تحقق من صحة هذا الترحيل. إذا كنت تستخدم Pomelo 2.2.6 ، فتحقق من إدخالات migrationBuilder.DropPrimaryKey
و AddPrimaryKey
واحذفها ، لأن هذه ليست ضرورية لـ MySQL وستتسبب في حدوث مشكلات في إنشاء نصوص SQL غير فعالة. تم إصلاح هذا في 3.1.
أعد تسمية فئة الكيان الفعلي.
قم بإنشاء ترحيل آخر لتحديث لقطة النموذج بأسماء الكيانات الجديدة.
إذا كنت تريد بعد ذلك إزالة .ToTable("RenamedEntity");
للرجوع إلى تسمية الجدول على أساس الاصطلاح:
قم بإزالة .ToTable("RenamedEntity");
. إذا حصلت على اسم الجدول بشكل صحيح ، فيجب أن يكون الاسم المستند إلى الاصطلاح هو نفسه الاسم الحالي.
قم بإنشاء ترحيل نهائي للتحقق من عدم إعادة تسمية الجدول مرة أخرى. إذا كان الأمر كذلك ، فارجع إلى جميع الخطوات وصحح الاسم وأعد. إذا كان الترحيل فارغًا ، يمكنك التراجع عنه.
ما زلت أختبرها ، ولكن ربما يمكنك القيام بذلك بالترتيب العكسي. بمعنى آخر:
.ToTable
مع اسم الجدول الحالي.ToTable
لمزيد من المعلومات ، راجع سؤال تجاوز سعة المكدس هذا:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns
في الأساس ، هناك استدلالات مطبقة ، يمكنها اكتشاف إعادة تسمية الجدول في بعض الحالات.
لكن إعادة التسمية هي إحدى تلك العمليات ، حيث تريد بالتأكيد التحقق من رمز الترحيل الذي تم إنشاؤه بعد ذلك وتغيير مكالمات DropTable
و CreateTable
إلى RenameTable
عند الضرورة.
قام EF Core بإعادة تسمية الجدول تمامًا مثل عمليات الترحيل التي تم إنشاؤها تلقائيًا.
migrationBuilder.DropPrimaryKey(
name: "PK_LogFieldsConfiguration",
table: "LogFieldsConfiguration");
migrationBuilder.RenameTable(
name: "LogFieldsConfiguration",
newName: "LogFieldsConfigurations");
migrationBuilder.AddPrimaryKey(
name: "PK_LogFieldsConfigurations",
table: "LogFieldsConfigurations",
column: "Id");
التعليق الأكثر فائدة
هذا هو قيد متأصل في EF ، وليس بوميلو مباشرة. لا تستطيع EF عادةً التمييز بين إسقاط / إنشاء جدول وإعادة تسمية.
الحيلة لإخباره بأنه إعادة تسمية هي تعيين اسم الجدول يدويًا ، إما عبر سمة في فئة الكيان ، أو عبر واجهة برمجة تطبيقات OnModelCreating بطلاقة.
التسلسل مثل:
على سبيل المثال ،
builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
توليد الهجرة. سيؤدي هذا إلى إنشاء ترحيل جدول إعادة التسمية الصحيح للكيان.
تحقق من صحة هذا الترحيل. إذا كنت تستخدم Pomelo 2.2.6 ، فتحقق من إدخالات
migrationBuilder.DropPrimaryKey
وAddPrimaryKey
واحذفها ، لأن هذه ليست ضرورية لـ MySQL وستتسبب في حدوث مشكلات في إنشاء نصوص SQL غير فعالة. تم إصلاح هذا في 3.1.أعد تسمية فئة الكيان الفعلي.
قم بإنشاء ترحيل آخر لتحديث لقطة النموذج بأسماء الكيانات الجديدة.
إذا كنت تريد بعد ذلك إزالة
.ToTable("RenamedEntity");
للرجوع إلى تسمية الجدول على أساس الاصطلاح:قم بإزالة
.ToTable("RenamedEntity");
. إذا حصلت على اسم الجدول بشكل صحيح ، فيجب أن يكون الاسم المستند إلى الاصطلاح هو نفسه الاسم الحالي.قم بإنشاء ترحيل نهائي للتحقق من عدم إعادة تسمية الجدول مرة أخرى. إذا كان الأمر كذلك ، فارجع إلى جميع الخطوات وصحح الاسم وأعد. إذا كان الترحيل فارغًا ، يمكنك التراجع عنه.
ما زلت أختبرها ، ولكن ربما يمكنك القيام بذلك بالترتيب العكسي. بمعنى آخر:
.ToTable
مع اسم الجدول الحالي.ToTable
لمزيد من المعلومات ، راجع سؤال تجاوز سعة المكدس هذا:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns