2014-09-10 5 views
1

У меня есть несколько записей, которые необходимо обновить до того же значения. Если бы я был только с помощью ADO.NET я мог бы просто вызвать хранимую процедуру, которая обновленное их все в одном ...Обновление набора записей в LINQ - все сразу

UPDATE myTable 
SET myColumn = "XXXXXX" 
WHERE filterColumn == 'YYY' 

Но так как я использую Entity Framework Я интересно, если их был подобный способ обновления набор записей сразу без необходимости прокручивать каждое из значений и устанавливать их отдельно? В настоящее время я использую ..

from s in myTables 
where s.filterColumn == 'YYY' 
select s; 

var results = s.ToList(); 

foreach (i in results){ 
    s.myColumn = "XXXXXX" 
} 

Есть ли способ установить значения все сразу, как в SQL?

Я использую Entity Framework v6.1

+0

Вы можете выполнить [raw sql query] (http://msdn.microsoft.com/en-us/data/jj592907.aspx) с помощью EF. –

ответ

3

Вы все еще можете выполнить команду sql при использовании Entity Framework. Вот как это сделать.

dbContext.Database.Connection.Open(); 
var cmd = dbContext.Database.Connection.CreateCommand(); 

cmd.CommandText = @"UPDATE myTable 
SET myColumn = @myColumn 
WHERE filterColumn = @filterColumn"; 

cmd.Parameters.Add(new SqlParameter("myColumn", "XXXXXX")); 
cmd.Parameters.Add(new SqlParameter("filterColumn", "YYY")); 
cmd.ExecuteNonQuery(); 
+0

Метод 'Database.ExecuteSqlCommand' еще проще: http://stackoverflow.com/a/5475210/124386 –

2

Платформа Entity Framework Расширенная библиотека содержит пакетный обновление/удаление функции:
https://github.com/loresoft/EntityFramework.Extended

myTables.Update(
    s => s.filterColumn == "YYY", 
    s => s.myColumn = "XXXXXX"); 

NB: Это в настоящее время поддерживает только SQL Server и SQL CE, хотя есть a pull request to add MySQL support.

+0

Возможно, стоит отметить, что EFE действительно поддерживает SQL Server. – Aron

+0

@Aron - и SQL Server Compact :-) – ErikEJ

Смежные вопросы