此LINQ to SQL更新查询的任何原因都不起作用。 。

时间:2009-06-29 02:00:36

标签: asp.net asp.net-mvc

不知何故,此更新代码无效:

这是我的控制器代码:

    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();
        }
    }

这是上面使用的repo代码(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_);
    }

修改

请注意,当调试一切正常时(没有例外),但当它重定向回Index时,数据在更新时发生更改时尚未更新。

3 个答案:

答案 0 :(得分: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()方法并且它有效。

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

答案 1 :(得分:0)

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

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

内联移动GetUser可以避免创建临时副本,这可能就是它的工作原理。

afaik你可以做点什么

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();
}

答案 2 :(得分:0)

也许你禁用了对象跟踪?