实体框架 – 实体框架4 – 为更新/插入获取生成的SQL

使用EF4,是否可以获取生成sql for 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会在幕后分开运行命令,然后我运行其他命令.将所有内容作为一个命令运行是理想的.

解决方法

您可以在设计时使用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.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...