代码之家  ›  专栏  ›  技术社区  ›  Geo

使用存储库模式,更新记录的最有效方式是什么?

  •  0
  • Geo  · 技术社区  · 16 年前

    我正在使用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 回复  |  直到 16 年前
        1
  •  1
  •   Buu    16 年前

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