كيفية تحديث الكائن مع عدم وجود سياقات البيانات

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

  •  03-07-2019
  •  | 
  •  

سؤال

وإطار الكيان يوفر مرونة كبيرة لتحديث البيانات في نفس datacontext

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()

وإذا كان لدي لنقل هذه الوظيفة Update لطبقة الخدمة التي تأخذ فقط "الشخص" في الطلب، ما يمكن أن يكون أفضل طريقة لتعيين بلادي "شخص" وجوه الطلب في datacontext دون أن تفعل نسخ العميق مرة أخرى؟

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

المحلول

وتحتاج إلى إرفاق كائن كيان لسياق البيانات.

وتحتاج أيضا إلى توسيع الطبقة الجزئية سياق البيانات الخاصة بك مع أسلوب AttachUpdeted. كما عند إرفاق كائن إلى سياق البيانات التي لا تعرف أن التحديثات التي بذلت. رمز أدناه سوف اقول سياق البيانات التي تم تحديثها كل الممتلكات ويحتاج إلى أن يكتب إلى قاعدة البيانات.

public static void Save(EntityObject entity)
{
   using(MyContext ctx = new MyContext)
   {
     ctx.AttachUpdated(entity);
     ctx.SaveChanges();
   }  
} 

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
   if (objectDetached.EntityState == EntityState.Detached)
   {
      object original = null;
      if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
         obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
      else
       throw new ObjectNotFoundException();
    }
} 

<وأ href = "http://geeks.ms/blogs/quintas/archive/2008/02/21/ado-net-entity-framework-attaching-detached-objects-in-short-lived-contexts. ASPX "يختلط =" نوفولو noreferrer "> المادة 1
المادة 2

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