如何使用Linq,Lambda和EF进行更新

时间:2012-09-02 23:02:25

标签: c# linq entity-framework lambda

我得到了这个用于用户创建的代码。

    public static void CreateUser(User user)
    {

            Save<User>(u => u.AddObject(user));

     }

    Save<T>(Action<ObjectSet<T>> func)
       where T : class
    {

        ...

        func(entitySet);

        entitiesContext.SaveChanges();
    }

现在我正在尝试编写一个更新方法,但它不能在u = user

上编译
public static void UpdateUser(User user)
{
        Save<User>(u => u = user);
}       

如何更新对象?

2 个答案:

答案 0 :(得分:1)

如果实体与上下文分离,您可以按如下方式更新它。

public static void UpdateUser(User user)
{
      Save<User>(u => { 
         u.Attach(user); 
         u.Context.ObjectStateManager
              .ChangeObjectState(user, System.Data.EntityState.Modified);
         });
} 

答案 1 :(得分:0)

如果你想用linq做,那么你可以实现应该有ref params的自定义通用委托。例如。

public delegate void MyDelegate<T>(ref T x);

 public static void CreateUser(User user)
 {
        Save<User>((ref User u) => u = user));
 }

Save<T>(MyDelegate<ObjectSet<T>> func)
   where T : class
{

    ...

    func(entitySet);

    entitiesContext.SaveChanges();
}