在Entity Framework中显示sql语句
在这里,您将学习如何记录Entity Framework 6发送到数据库的命令和查询。
在EF 6之前,我们使用数据库跟踪工具或第三方跟踪实用程序来跟踪实体框架发送的数据库查询和命令。现在,EF 6提供了DbContext.Database.Log属性来记录DbContext生成的SQL。
Log属性是Action<string>类型的,所以你可以用字符串参数附加一个委托方法并返回void。
下面的示例演示了将EF活动记录到控制台。
using (var context = new SchoolDBEntities())
{
context.Database.Log = Console.Write;
var student = context.Students
.Where(s => s.StudentName == "Student1")
.FirstOrDefault<Student>();
student.StudentName = "Edited Name";
context.SaveChanges();
}
Output:
在上面的例子中,Console.Write()方法被附加到Log属性,因为它接受字符串参数并返回void。您可以在输出中看到,它记录了EF执行的所有活动,例如打开和关闭连接,执行和完成时间以及数据库查询和命令。
您可以将自定义类的方法附加到Log属性。下面的示例使用自定义类的方法记录SQL。
public class Logger
{
public static void Log(string message)
{
Console.WriteLine("EF Message: {0} ", message);
}
}
class EF6Demo
{
public static void DBCommandLogging()
{
using (var context = new SchoolDBEntities())
{
context.Database.Log = Logger.Log;
var student = context.Students
.Where(s => s.StudentName == "Student1")
.FirstOrDefault<Student>();
student.StudentName = "Edited Name";
context.SaveChanges();
}
}
}
参考
https://www.entityframeworktutorial.net/
https://msdn.microsoft.com/