Entity Framework 4 - Получить сгенерированный SQL для обновлений / вставок - PullRequest
10 голосов
/ 08 февраля 2011

С помощью EF4 можно получить сгенерированный SQL для обновлений / вставок, а не выполнять его ... точно так же, как вы можете просмотреть запрос SQL перед его выполнением.

Причина в том, что у меня есть набор вспомогательных функций, которые выполняют команды SQL. Например ...

Decrement<Category>("ProductCount", categoryID);
SetNull<Product>("CategoryID", productID);

Который порождает ...

UPDATE Categories 
SET ProductCount = ProductCount - 1 
WHERE CategoryID = @CategoryID; 

UPDATE Products 
SET CategoryID = NULL 
WHERE CategoryID = @ProductID;

Обычно я запускаю несколько команд для каждой операции, поэтому при каждом вызове вспомогательной функции SQL генерируется и сохраняется. Когда я вызываю SaveChanges (), все команды выполняются в ОДИН раз.

Единственная проблема в том, что EF запускает свои команды отдельно за кулисами, а потом я запускаю остальные сразу. Было бы идеально запускать все как одну команду.

1 Ответ

5 голосов
/ 09 февраля 2011

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

public static void WriteGeneratedSql(EntityCommand cmd)
{
     cmd.Prepare();

     IServiceProvider isp = (IServiceProvider)EntityProviderFactory.Instance;

     DbProviderServices mps = (DbProviderServices)isp.GetService(typeof(DbProviderServices));

     EntityCommandDefinition definition = (EntityCommandDefinition)mps.CreateCommandDefinition(cmd);

     int commandId = 1;

     foreach (string commandText in definition.MappedCommands)
     {
          Console.WriteLine("Generated Command {0}:", commandId);
          commandId++;
          Console.WriteLine(commandText);
     }
}

Найдено здесь .

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