LINQ to SQL: как обновить единственное поле без извлечения всей сущности - PullRequest
10 голосов
/ 21 июля 2010

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

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

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

Ответы [ 3 ]

8 голосов
/ 29 июля 2010

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

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

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

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

Одно предостережение: если вы хотите установить 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
1 голос
/ 21 июля 2010

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

Person person = _entities.Persons.FirstOrDefault(p => p.Id == id);
person.FirstName = "Bill";
_entities.Refresh(System.Data.Objects.RefreshMode.ClientWins, person);
_entities.SaveChanges();
1 голос
/ 21 июля 2010

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

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

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

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

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