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

前端之家收集整理的这篇文章主要介绍了实体框架 – 实体框架4 – 为更新/插入获取生成的SQL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用EF4,是否可以获取生成sql for Updates / Inserts而不是执行它…就像您可以在运行之前查看sql一样.

原因是,我有一组执行sql命令的帮助函数.例如…

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

哪个生成

  1. UPDATE Categories
  2. SET ProductCount = ProductCount - 1
  3. WHERE CategoryID = @CategoryID;
  4.  
  5. UPDATE Products
  6. SET CategoryID = NULL
  7. WHERE CategoryID = @ProductID;

我通常每个操作运行几个命令,所以在每个帮助函数调用时,sql生成和存储.当我调用SaveChanges()时,所有命令都在一次运行.

唯一的问题是EF会在幕后分开运行命令,然后我运行其他命令.将所有内容作为一个命令运行是理想的.

解决方法

您可以在设计时使用sql Profiler获得它,但我认为您的意思是您希望在运行时.这里有一个例子,我发现如何做到这一点:
  1. public static void WriteGeneratedsql(EntityCommand cmd)
  2. {
  3. cmd.Prepare();
  4.  
  5. IServiceProvider isp = (IServiceProvider)EntityProviderFactory.Instance;
  6.  
  7. DbProviderServices mps = (DbProviderServices)isp.GetService(typeof(DbProviderServices));
  8.  
  9. EntityCommandDefinition definition = (EntityCommandDefinition)mps.CreateCommandDefinition(cmd);
  10.  
  11. int commandId = 1;
  12.  
  13. foreach (string commandText in definition.MappedCommands)
  14. {
  15. Console.WriteLine("Generated Command {0}:",commandId);
  16. commandId++;
  17. Console.WriteLine(commandText);
  18. }
  19. }

发现here.

猜你在找的MsSQL相关文章