Linq to Entities: Как эффективно копировать записи из одной таблицы в другую? - PullRequest
2 голосов
/ 23 февраля 2011

У нас есть система событий, которая организует данные по дате и времени.Мы часто копируем данные из старого события в новое событие как стартер, а затем модифицируем его.

Это то, что мы делаем в Linq:

  • Получите исходные объекты локально с помощью .ToList ()
  • Для каждого элемента создайте новый объект
  • Скопируйте значения неосновного ключа в новый объект и установите новый первичный ключ
  • Добавьте этот объект в таблицу

Это генерирует огромное количество вызовов базы данных.По крайней мере, он заключен в транзакцию.

Это утверждение в SQL.Есть ли способ сделать Linq таким эффективным без встраивания SQL?

insert into targetTable (eventID, two, three, four five)
select @newEventId as eventID, two, three, four, five
from   targetTable 
where  eventid = @eventid

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Нет, вы не можете сделать код EF более эффективным. Так работает EF. Если вы хотите эффективно обернуть ваш SQL в хранимую процедуру, отобразите хранимую процедуру в EF designer и вызовите этот SP.

Если вы не можете создать хранимую процедуру, выполните SQL напрямую. Вы можете использовать:

ObjectContext.ExecuteStoreCommand(...)

Этот метод доступен только в EF4.

1 голос
/ 23 февраля 2011

Чтобы сохранить его эффективность, вам нужно будет поместить ваш SQL в хранимую процедуру, а затем добавить эту хранимую процедуру в вашу модель данных сущности.

...