使用实体框架在解决方案中显示T-sql

时间:2019-04-30 13:38:00

标签: c# sql-server ef-core-2.2

当我在实体框架中使用linq并想查看我的t-sql查询时,我使用了sql profiler,但是在解决方案中有什么办法可以看到t-sql吗?

1 个答案:

答案 0 :(得分:0)

更新:我刚刚注意到这个问题与EF Core有关,所以我不确定该方法是否有效。我会留下答案以防万一。

更新2:显然,以下所述的简单Log方法在EF Core中不再那么简单了。我找到此博客条目:

https://blogs.msdn.microsoft.com/dbrowne/2017/09/22/simple-logging-for-ef-core/

,以及上面的@Jonesopolis评论。

如果您只想查看由Entity Framework查询生成的T-Sql,则可以使用数据上下文的Log属性并指定要调用的方法。

例如:

using (var ctx = new MyDataContext())
{
    ctx.Database.Log = Console.WriteLine;

    var results = ctx.SomeTable.Where(<some predicate here>);

    foreach (var row in results)
    {
        //Do something with row here
    }
}

在此示例中,我将其设置为在登录时调用Console.WriteLine。 SQL查询将使用WriteLine方法在控制台中显示。

Log属性的类型为Action<string>,因此您可以传递任何将字符串作为参数的方法。