Обновление не работает в модели данных объекта ADO.net - PullRequest
2 голосов
/ 10 июля 2010

Я использую ADO.net Entity Data модель для работы с базой данных.

В моей программе я хочу обновить запись пользовательской таблицы, поэтому для этого я использую приведенный ниже код.

В этой функции я отправляю измененную информацию о пользователе, а затем перезаписываю информацию с помощьютекущая информация о пользователе.

После того, как я запустил objUser = _user; и затем вызвал objContext.SaveChanges();, чтобы сохранить изменения.

Но когда я делаю это, изменения не сохраняются в базе данных.Я использую этот код для других программ, но в этом случае код не работает!

public void Update(tbLiUser _user)
{
    LinkContext objContext = this.Context;

    tbLiUser objUser = objContext.tbLiUsers.First(u => u.tluId == _user.tluId);
    objContext.Attach(objUser);
    objUser = _user;

    objContext.SaveChanges();
}

1 Ответ

2 голосов
/ 10 июля 2010

Прежде всего, если вы уже извлекаете objUser из objContext, на самом деле нет смысла привязывать этого пользователя к контексту сразу после его извлечения. Так что я бы полностью отбросил эту строку:

objContext.Attach(objUser);

Также - вам может понадобиться просто обновить objUser для каждого свойства из значений в _user вместо того, чтобы просто назначать весь объект.

Чтобы помочь вам избежать большого количества утомительного кода, вы можете использовать что-то вроде AutoMapper , чтобы позволить вам назначать свойства одного типа объекта другому. Или вы можете создать умную подпрограмму, которая будет сравнивать два objUser и _user и обновлять только те свойства в objUser, которые фактически отличаются от значений в _user - не должно быть слишком сложно создать это метод:

objUser.UpdateValuesFromOtherUser(_user);
objContext.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...