【问题标题】:Entity Framework 4 - Get generated SQL for Updates/InsertsEntity Framework 4 - 为更新/插入获取生成的 SQL
【发布时间】:2011-02-09 06:45:38
【问题描述】:

使用 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 在后台单独运行它的命令,然后我马上运行其他命令。将所有内容作为一个命令运行是理想的。

【问题讨论】:

    标签: entity-framework entity-framework-4


    【解决方案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);
         }
    }
    

    找到here

    【讨论】:

    • 感谢您的回答,但这并不是我所需要的。在插入新对象或检索然后更新现有对象后,我需要获取为这些操作生成的 SQL。我无法从 ObjectContext 中获取 EntityCommand 对象。
    • 我们很清楚,您是想在运行时获取它,还是在设计时获取它?也就是说,您是想一次性获取它以便编写一个 proc,还是需要在运行时以某种方式使用它?
    • 在运行时。我想基本上在执行之前获取生成的 INSERT/UPDATE SQL,将它与我自己的语句结合起来,然后将所有语句作为一个命令运行。
    • 好的,我想我在这里得到了你的答案:blogs.msdn.com/b/jkowalski/archive/2009/06/11/…。这并不完美——你必须使用他们的提供者来获得跟踪功能,但我认为它与我们将在这个版本中获得的一样接近。 HTH。
    • 这看起来很有希望,但开始工作可能需要一些努力。不过,从我们所做的研究来看,我认为这是我们将得到的最接近的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多