Linq to Sql - обновить все поля, кроме первичного ключа - PullRequest
1 голос
/ 22 октября 2009

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

originalObject = newObject
db.submitChanges()

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

Я пытался перезаписать это как:

Dim originalKey = originalObject.MyPrimaryKey
originalObject = newObject
originalObject.MyPrimaryKey = originalKey
db.SubmitChanges()

... но это тоже не работает. Если я установлю отдельные свойства, они будут сохранены (то есть: originalObject.PropertyName = "New Value"), а затем submitChanges, это работает, но у объекта есть около ста свойств, которые я не хочу обновлять по отдельности. Итак, как мне успешно обновить объект и submitChanges ()?

Ответы [ 2 ]

1 голос
/ 23 октября 2009

Если у вас уже есть измененный объектный объект, вы сможете использовать (yourDataContext). (YourTable) .Attach (ifiedObject, true), а затем SubmitChanges.

0 голосов
/ 31 января 2012

Цель приведенного ниже кода - обновить сущность в базе данных без необходимости сопоставления полей от отдельного объекта с присоединенным (в базе данных).

var dtCxt = Util.GetDtCxt();
dtCxt.YourTable.Attach(detachedObject, GetObjectById(detachedObject.id));
dtCxt.SubmitChanges();

GetObjectById использует другой DataContext. Вы должны сделать это.

private Incoterm GetObjectById(int id)
{
    var dtCxt = Util.GetDtCxt();
    return dtCxt.YourTable.FirstOrDefault(i => i.id == id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...