2009-06-29 16 views
3

不知怎的,这个更新代码不工作:为什么这个LINQ to SQL更新查询无法正常工作。 。

这里是我的控制器代码:

private UserRepository repo = new UserRepository(); 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, UserInfo user_) 
    { 
     try 
     { 
      repo.UpdateUser(user_); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

这里是上面(UserRepository)用于回购代码

private UsersDataContext db = new UsersDataContext(); 

    public void UpdateUser(UserInfo user_) 
    { 
     UserInfo origUser = GetUser(user_.Id); 
     origUser.First = user_.First; 
     origUser.Last = user_.Last; 
     origUser.City = user_.City; 
     origUser.Country = user_.Country; 
     origUser.State = user_.State; 
     origUser.Street_Address = user_.Street_Address; 

     db.SubmitChanges(); 
    } 

    public UserInfo GetUser(int id_) 
    { 
     return db.UserInfos.SingleOrDefault(d => d.Id == id_); 
    } 

编辑:

请注意,当调试一切运行良好(没有例外),但当它重新导向索引时,数据在更新时发生更改时尚未更新。

+1

你有没有试过寻找它捕捉的异常? – womp 2009-06-29 02:13:59

+0

你能详细说明“不工作”吗?行动方法没有被解雇?数据库方法没有被解雇?你是否设置了断点并验证了user_的内容? – KingNestor 2009-06-29 02:14:26

回答

1

我只是改变了userrepository以下:

private UsersDataContext db = new UsersDataContext(); 

public void UpdateUser(UserInfo user_) 
{ 
    UserInfo origUser = db.UserInfos.SingleOrDefault(d => d.Id == id_); 
    origUser.First = user_.First; 
    origUser.Last = user_.Last; 
    origUser.City = user_.City; 
    origUser.Country = user_.Country; 
    origUser.State = user_.State; 
    origUser.Street_Address = user_.Street_Address; 

    db.SubmitChanges(); 
} 

所以我所做的就是移动的getUser()方法内联和它的工作。

它可能是一个红鲱鱼,它只是一个缓存问题。 。

0

你没有提到你如何定义UserInfo,它是一个结构体还是一个类?

如果它是一个结构,从GetUser返回它将创建一个新的对象,因此你不会更新数据库对象,只有它的本地副本。

移动GetUser内联避免此临时副本的创建,这可能是为什么它的工作。

据我所知,你可以做类似

public void GetUser(int id_, out UserInfo user_) 
{ 
    user_ = db.UserInfos.SingleOrDefault(d => d.Id == id_); 
} 

你可以这样称呼它

public void UpdateUser(UserInfo user_) 
{ 
    UserInfo origUser; 
    GetUser(user_.Id, out origUser); 
    origUser.First = user_.First; 
    origUser.Last = user_.Last; 
    origUser.City = user_.City; 
    origUser.Country = user_.Country; 
    origUser.State = user_.State; 
    origUser.Street_Address = user_.Street_Address; 

    db.SubmitChanges(); 
} 
相关问题