Что с шаблоном Repository, что является наиболее эффективным способом обновления записей? - PullRequest
0 голосов
/ 13 сентября 2009

Я реализую шаблон репозитория с помощью 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();
    }

1 Ответ

1 голос
/ 14 сентября 2009

Нет, вы не можете сделать это с 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();
}
...