كيفية تحديث الكائن مع عدم وجود سياقات البيانات
-
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