مع نمط مستودع، ما هي الطريقة الأكثر فعالية لتحديث السجلات؟
-
07-07-2019 - |
سؤال
وأنا تنفيذ خطة مستودع مع إطار كيان ADO.NET. وأرى أن تحديث السجلات أكثر تعقيدا نسبيا من مجرد إضافة أو إزالة من قاعدة البيانات. انظر أدناه بيان تحديث وإضافة بيان لحكمك.
وكنت أتساءل إذا كان هناك أي طريقة أستطيع أن تحديث السجل دون الحاجة إلى إستعادة السجل الأصلي أولا.
public void Update(User user)
{
var userToUpdate = (from u in db.UserSet
where u.UserID == user.UserID
select u).FirstOrDefault(); //original record
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName,
user);
db.SaveChanges();
}
إضافة بيان لنفس الريبو:
public void Add(User user)
{
user.MemberFrom = DateTime.Now;
_repository.AddToUserSet(user);
_repository.SaveChanges();
}
المحلول
لا، لا يمكنك أن تفعل ذلك مع EF (إلا إذا كنت تستخدم ADO.NET مباشرة بطبيعة الحال). قال ذلك، يمكنك تبسيط رمز استرداد عن طريق إضافة بعض الأساليب لفئة جزئية من السياق كيان الخاص بك. هذا هو كيف أفعل ذلك:
public partial class MyEntities
{
public T GetById<T>(object id) where T : class
{
EntityKey key = CreateKey<T>(id);
// see http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey.aspx
return (T)GetObjectByKey(key);
}
public static EntityKey CreateKey<T>(object id)
{
var type = typeof(T);
return new EntityKey("MyEntities." + type.Name, "Id", id);
}
}
والآن، يجب أن يكون لديك رمز أعلاه
public void Update(User user)
{
var userToUpdate = db.GetById<UserSet>(user.UserID);
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName, user);
db.SaveChanges();
}
لا تنتمي إلى StackOverflow