Как я могу обновить в Linq объект, который отключен от базы данных? - PullRequest
6 голосов
/ 02 сентября 2008

Код ниже работает неправильно и выдает InvalidOperationExcepiton.

public void Foo()
{
 DataContext context = new DataContext();
 LinqEntity item = new LinqEntity(){ Id = 1, Name = "John", Surname = "Doe"} ;
 context.LinqEntities.Attach(item, true);
}

Ответы [ 4 ]

4 голосов
/ 02 сентября 2008

По умолчанию сущности будут использовать все поля для проверки параллелизма при внесении изменений. Вот что выдает InvalidOperationException.

Это может быть установка свойства Проверка обновлений для всех полей на Никогда. Это должно быть сделано во всех полях, чтобы прикрепить объект как измененный. Если это сделано, дополнительный вызов context.SubmitChanges () сохранит данные.

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

LinqEntity item = new LinqEntity(){ Id = 1, Name = "OldName", Surname = "OldSurname"}; 
context.LinqEntities.Attach(item);
item.Name = "John";
item.Surname = "Doe";
context.SubmitChanges();
1 голос
/ 02 сентября 2008

ОК, если вы пытаетесь обновить строку с ID = 1, вы сделаете это так:

DataContext context = new DataContext();
LinqEntity item = (from le in context.LinqEntities
                  where le.ID == 1
                  select le).Single();
item.Name = "John";
item.Surname = "Doe";

context.Submit();

Вы также можете заменить выражение Linq на более краткую лямбду:

LinqEntity item = context.LinqEntities.Single(le => le.ID == 1);

Самое важное, что делает DataContext, - это отслеживает любые сделанные вами изменения, поэтому при вызове метода Submit он автоматически генерирует операторы Insert для тех вещей, которые вы изменили.

1 голос
/ 02 сентября 2008

Я не уверен, что вы имеете в виду, отключившись от базы данных.

Похоже, вы пытаетесь вставить новую строку в таблицу LinqEntities - это правильно?

Если это тот случай, вы захотите сделать

context.LinqEntities.InsertOnSubmit(item);
context.Submit();
0 голосов
/ 03 сентября 2008

При использовании ORM вы обычно выбираете объект перед его обновлением.

Вы можете использовать DataContext.ExecuteCommand(...), чтобы обойти ORM, если вы не хотите делать выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...