Entity Framework 4 - Получить сгенерированный SQL для обновлений/вложений
С EF4 можно ли получить сгенерированный SQL для Updates/Inserts, а не выполнять его... точно так же, как вы можете просмотреть 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
Вы можете получить его во время разработки с помощью 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);
}
}
Найдено здесь.