使用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在幕后单独运行其命令,然后我立即运行其他命令。将所有内容作为单个命令运行是理想的。
答案 0 :(得分:5)
您可以在设计时使用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);
}
}
找到here。