Linq to SQL - обновить объект, не выбрав его первым - PullRequest
0 голосов
/ 23 декабря 2010

Я играю с 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 и т. Д. Есть ли способ обновить существующий объект (по идентификатору) без предварительноговыбрать его, а затем вручную переназначить все поля?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

да, вы можете использовать datacontext.executecommand или datacontext.executequery, где вы можете написать SQL-запрос, и вы можете обновить любую строку таблицы, не вытягивая ее из памяти, на самом деле linq to sql работает в объектах памяти, что означает, что если вы хотите сначала выполнить какую-либо операцию вам нужно получить его, тогда только вы можете выполнить операции, exexutecommand и executequery - единственный способ сделать это

1 голос
/ 23 декабря 2010

Другой способ решения проблемы заключается в следующем.Не позволяйте инфраструктуре MVC создавать новый объект User для вас, загрузите нужного пользователя из DataContext и обновите этот объект с помощью 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); 
}
0 голосов
/ 23 декабря 2010

вы можете сделать что-то вроде

var user = new User
{
    id = um.Id,
}
db.Users.Attach(um, user);
db.SubmitChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...