مع نمط مستودع، ما هي الطريقة الأكثر فعالية لتحديث السجلات؟

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

  •  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();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top