LINQ к SQL: как обновить единственное поле, не получая целый объект

Я хочу обновить единственное поле объекта, когда я знаю идентификатор объекта.

Действительно ли это возможно в LINQ к SQL, не получая полный объект (со всеми полями от DataContext, который является служебным)? Действительно ли возможно создать и присоединить объект к DataContext и отметить точное поле (поля) для синхронизации на DataContext. SubmitChanges (или что-то как этот)?

Заранее спасибо!

10
задан Andrew Florko 21 July 2010 в 16:57
поделиться

3 ответа

Да, вы можете:

Foo foo=new Foo { FooId=fooId }; // create obj and set keys
context.Foos.Attach(foo);
foo.Name="test";
context.SubmitChanges();

В вашем Dbml установите UpdateCheck = "Never" для всех свойств.

Это сгенерирует один оператор обновления без выбора.

Одно предостережение: если вы хотите установить для Name значение null, вам придется инициализировать свой объект foo другим значением, чтобы Linq мог обнаружить изменение:

Foo foo=new Foo { FooId=fooId, Name="###" };
...
foo.Name=null;

Если вы хотите проверять метку времени при обновлении это тоже можно сделать:

Foo foo=new Foo { FooId=fooId, Modified=... }; 
// Modified needs to be set to UpdateCheck="Always" in the dbml
8
ответ дан 4 December 2019 в 01:29
поделиться

Вы всегда можете создать стандартный оператор T-SQL и выполнить его для своего хранилища данных:

YourDataContext
  .ExecuteCommand("UPDATE dbo.YourTable SET ThatField = newValue WHERE ID = 777", null);

С самим Linq-to-SQL вы не можете этого сделать - основное предположение состоит в том, что он всегда воздействует на объект, на весь объект и только на объект.

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

1
ответ дан 4 December 2019 в 01:29
поделиться

Вы можете обновить объект. В этом примере будет изменено имя человека:

Person person = _entities.Persons.FirstOrDefault(p => p.Id == id);
person.FirstName = "Bill";
_entities.Refresh(System.Data.Objects.RefreshMode.ClientWins, person);
_entities.SaveChanges();
1
ответ дан 4 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: