قوالب السجلات النشطة 3.0.0.4 من MySQL لا تعيد آخر معرف تم إدخاله
-
30-09-2019 - |
سؤال
خطوات لإعادة إنتاج الخطأ:
إنشاء جدول الجدول (person_id int (11) ليس NULL AUTO_INCREMENT ، FirstName varchar (20) الافتراضي الفارغ ، الاسم الأخير varchar (20) الفارغ الفار 36 charset الافتراضي = latin1
أدخل في الشخص (FirstName ، LastName ، العمر) قيم ('myName' ، null ، null) ؛ حدد last_insert_id () على أنه newID
Person personObject = new Person();
personObject.Firstname= "myname";
personObject.Add();
Response.Write(personObject.PersonId);
الإخراج "0 '
المحلول
هذا ليس خطأ بل خطأ من المحتمل أن يحدث إذا قمت بتغيير اتفاقية التسمية للأعمدة والجداول -> Topascalcase. بشكل افتراضي ، يتم نسخ اسم العمود/الجدول بالطريقة التي يتم تعريفها على قاعدة بيانات MySQL. مما يجعل هذا قبيح
إبداعي
person personObject = new person()
personObject .person_id = 1;
personObject .first_name = "hello";
personObject .Save();
ما أحب أن يحدث
Person personObject = new Person()
personObject.PersonId = 1;
personObject.FirstName = "hello";
personObject.Save();
سيكون هناك اثنان (~ 3 ، لا يمكن أن نتذكر الآن) المشكلات الرئيسية في قلب دون الصوت بعد تغيير القالب الافتراضي لإنشاء الأسماء التالية باستخدام فئة Subsic's Soundector.
يجب تغيير انعكاس الخصائص المطلوبة للحصول على التحديثات/الإدراج على مثال:
//from
item.GetType().GetProperty(tbl.PrimaryKey.Name);
//to
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name));
يجب إرجاع أسماء الأعمدة إلى خاصيةها الأصلية عند القيام بإدراج مثال:
//from
GetColumn(key)
//to
GetColumn(Inflector.AddUnderscores(key))