لماذا يمكن أن يتمكن إطار الكيان من استرداد الكيانات ولكن لا يحفظ/تحديث/حذفها؟

StackOverflow https://stackoverflow.com/questions/2356457

سؤال

انا املك WPF التطبيق مع ملف .mdf المحلي التي أنشأت عليها إطار كيان نموذج الطبقة.

الاسترداد كيانات من قاعدة البيانات يعمل بشكل جيد:

//get entities
using (var context = new TestDataEntities1())
{
    var customers = from c in context.Customers
                    select c;
    foreach (var customer in customers)
    {
        TheCustomers.Add(customer);
    }
}

لكن، تحديث و مضيفا و حذف* لا. لا يوجد خطأ **, ، يخطو تصحيح الأخطاء مباشرة ، لا توجد رسائل في الإخراج ، ولكن البيانات في جدول قاعدة البيانات لا يزال دون تغيير.

//update entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 1
                    select c).FirstOrDefault();
    customer.FirstName = DateTime.Now.ToString();
    int num = context.SaveChanges(); //returns 1, table unchanged

}

//add entity
using (var context = new TestDataEntities1())
{
    var customer = new Models.Customers();
    customer.FirstName = "Ned";
    customer.LastName = "Newton";
    context.AddToCustomers(customer);
    int num = context.SaveChanges(); //returns 1, table unchanged
}

//delete entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 2
                    select c).FirstOrDefault();
    context.Detach(customer); // table unchanged
}

ما الذي يجب علي فعله للحصول على إطار كيان لتحديث وإضافة كيانات إلى جدول قاعدة البيانات؟

هل كانت مفيدة؟

المحلول

أولاً، SaveChanges لا يضمن تحديث. يرجع تم تغيير # من الصفوف. لذا تحقق من قيمة الإرجاع. إذا كان 0 ، فإن EF لا فكر في قام بتحديث. إذا كان> 0 فهذا يفعل.

ثانياً ، يجب عليك ملف تعريف SQL لمعرفة ما ترسله EF.

إذا كانت نتيجة SaveChanges هو 0 ، فمن المؤكد أن السبب هو أن EF لا تعتقد أن أي شيء في السياق يتم تعديله. لماذا يعتمد ذلك على كيفية تتبع تغييراتك. الرمز الخاص بك أعلاه يبدو صحيحا لإدراج ، ولكن لتحديث ApplyPropertyChanges لا لزوم له ويجب إزالته.

إذا كانت EF ترسل SQL ولكن DB لا يفعل شيئًا معها ، فيجب عليك فحص SQL لإصلاح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top