Эффективный способ обновить столбец из таблицы с помощью LinqSql?

В Sql, например, я бы сделал:

UPDATE MyTable SET MyColum='value' WHERE Id=132

Каким будет эквивалент в базе данных EF Code First?

ОБНОВИТЬ:

Увидев ответы, мне нужно уточнить свой вопрос. Я ищу эффективный способ обновить один столбец. Если я использую Single() или любую подобную функцию, производительность очень низкая по двум причинам: 1) Есть 2 оператора SQL, один для SELECT и один для UPDATE, 2) Функция Single извлекает все столбцы.

UPDATE MyTable SET MyColum='value' WHERE Id=132

Приведенное выше предложение эффективно, потому что это только одна транзакция, и никакие значения не отправляются клиенту с сервера. Я хотел бы, чтобы это было эквивалентным предложением в Linq Sql.


person Dabiel Kabuto    schedule 04.01.2015    source источник


Ответы (2)


SingleOrDefault вернет объект, если он существует в базе данных, или null в противном случае:

var row = context.MyTable.SingleOrDefault(x => x.id == 132);
if(row != null) {
  row.MyColumn = "Value";
  context.SaveChanges();
}
person ilans    schedule 04.01.2015
comment
Возможно, стоит добавить, что это работает только тогда, когда идентификатор уникален и существует, он выйдет из строя, если не будет ровно одной строки. - person DaveShaw; 04.01.2015

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

using (MyEntities me=new MyEntities())
{
     if( (from t in me.MyTables where mt.Id == 132 select t).Any())
     {    
         MyTable mt= (from t in me.MyTables where mt.Id == 132 select t).Single();
         mt.MyColumn= "Value";
         me.SaveChanges();
     }
}
person mohsen    schedule 04.01.2015