EF什么时候知道它使用的SQL语句?

时间:2016-05-25 19:57:19

标签: c# entity-framework

我们正在努力记录Entity Framework对数据库使用的SQL语句。我们正在使用SQL Server 2012.

我已经做了一些实验,通过将委托分配给Database.Log对象的DbContext属性来了解如何完成此操作。在我的客户记录器中,我发现当我执行INSERT / UPDATE / DELETE时,我可以很容易地获得由EF生成的SQL语句,并且我假设{SELECT 1}}(虽然此时我一直专注于插入,更新和删除)。

但除非我错了(总是可能的),否则在我看来,就好像委托只能访问EF生成的SQL一样。我对此是否正确?如果是这样,EF在什么时候“知道”SQL语句将会是什么?

(我应该提一下,在这一点上,我们直接针对表运行;我们没有使用存储过程。这可能会在未来发生,但目前还没有。)

1 个答案:

答案 0 :(得分:1)

您可以在使用拦截界面发送命令之前拦截命令(并修改它们)。有关概述,请参见https://msdn.microsoft.com/en-us/data/dn469464.aspx,有关实施,请参见http://www.entityframeworktutorial.net/entityframework6/database-command-interception.aspx

由于您可以在执行之前和之后编写代码,因此您可以编写详细的日志记录。它比使用Database.Log更灵活。这基本上为您提供了一个字符串,但使用拦截器,您可以随心所欲地使用所有可用的相关信息。