Как вы выполняете пользовательский SQL в EF CTP4 - PullRequest
2 голосов
/ 03 декабря 2010

Используя Entity Framework CPT4, есть ли способ выполнить пользовательскую команду или скрипт?

например:

_dbSet.Provider.Execute("Truncate Table Users");

FWIW; Я буду использовать это в настройках класса для своих модульных тестов и буду настраивать таблицы с чистыми данными.

Ответы [ 3 ]

1 голос
/ 03 декабря 2010

Попробуйте метод ObjectContext.ExecuteStoreCommand.

Выполняет произвольную команду непосредственно для источника данных с использованием существующего соединения.

Вызов метода ExecuteStoreCommandэквивалентно вызову метода ExecuteNonQuery класса DbCommand.

Другая полезная информация: Совет 41 - Как выполнить T-SQL непосредственно для базы данных

С этим примером для ExecuteStoreCommand:

// 10% inflation day! 
ctx.ExecuteStoreCommand("UPDATE Products SET Price = Price * 1.1");
0 голосов
/ 03 декабря 2010

Самый быстрый обходной путь, который я могу придумать, - это использование хранимых процедур.Альтернативой является использование пакетного удаления, описанного http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx <- здесь, но код основан на Linq2Sql, а не EF, вам придется его портировать. </p>

0 голосов
/ 03 декабря 2010

Может быть, взгляните на ndbunit , чтобы настроить и демонтировать вашу базу данных для модульных тестов

Редактировать:

Это то, что мы используем в нашем приложении для модульного / интеграционного тестирования нашего уровня доступа к данным, который фактически реализован с использованием EF4.Это довольно просто и предоставляет хороший способ вставлять и очищать повторяемые тестовые данные.

Однако нам также необходимо удалить / усечь таблицу в самой логике приложения с помощью EF.Итак, чтобы ответить на ваш оригинальный вопрос, мы просто включили скрипт «удалить из таблицы» в хранимый процесс, который мы затем вызываем из EF, используя

_dataContext.ExecuteFunction("SchemaName.MyTableDeleteProc");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...