使用Repository模式,更新记录的最有效方法是什么?

时间:2009-09-13 18:14:39

标签: asp.net-mvc repository-pattern

我用ADO.NET实体框架实现Repository Pattern。我发现更新记录比仅添加或删除数据库要复杂得多。请参阅下面的Update语句并添加语句以供您判断。

我想知道是否有任何方法可以更新记录而无需先检索原始记录。

 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 个答案:

答案 0 :(得分:1)

不,你不能用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();
}