Любая причина, почему этот запрос обновления LINQ to SQL не работает. , - PullRequest
3 голосов
/ 29 июня 2009

Каким-то образом этот код обновления не работает:

Вот мой код контроллера:

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

EDIT:

Обратите внимание, что при отладке все работает нормально (без исключений), но при перенаправлении обратно в индекс данные не обновлялись при изменениях после обновления.

Ответы [ 3 ]

1 голос
/ 29 июня 2009

Я просто изменил репозиторий пользователя на следующее:

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 голосов
/ 01 июля 2009

Может быть, вы отключили отслеживание объектов?

0 голосов
/ 30 июня 2009

Вы не упоминаете, как вы определили 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...