Linq to SQL - 更新对象而不先选择它

时间:2010-12-23 20:25:21

标签: c# sql-server linq-to-sql

我正在使用ASP.NET MVC3 Beta 2,并使用Linq to SQL作为模型。我是我的一个控制器,我有这样的动作:

    UserDataContext db = new UserDataContext();
    [HttpPost]
    public ViewResult Edit(User um) {
        if (!TryUpdateModel(um)) {
            ViewBag.UpdateError = "Update Failure";
            return View("Details", um);
        }
        //How do I update the existing user? The following fails
        //db.Users.Attach(um, true);
        db.SubmitChanges();
        return View("Details", um); 
    }

User对象包含Id,FirstName,LastName等字段。有没有办法更新现有对象(按ID匹配)而不先选择它,然后手动重新分配所有字段?

3 个答案:

答案 0 :(得分:2)

是的你可以使用datacontext.executecommand或datacontext.executequery你可以写sql查询你可以更新任何表行而不用它内存,实际上linq to sql与内存对象一起工作意味着你想先执行任何操作你需要获取它然后只有你可以执行operatin,exexutecommand和executequery是执行它的方法

答案 1 :(得分:1)

解决问题的另一种方法如下。不要让MVC框架为您创建新的User对象,从DataContext加载您需要的User并使用ValueCollection更新该对象。

UserDataContext db = new UserDataContext();
[HttpPost]
public ViewResult Edit(int userID, FormCollection collection) 
{
    var user = db.Users.SingleOrDefault(o => o.ID == userID);

    // make sure user or collection isn't null.
    if (!TryUpdateModel(user, collection)) 
    {
        ViewBag.UpdateError = "Update Failure";

        return View("Details", um);
    }

    db.SubmitChanges();

    return View("Details", um); 
}

答案 2 :(得分:0)

你可以做点什么

var user = new User
{
    id = um.Id,
}
db.Users.Attach(um, user);
db.SubmitChanges();