一、用数据库监视看 先排除EF自身的另一种方法看EF执行的SQL语句 方法:使用sqlserver中的sqlprofiler 监测工具,这个每次执行都会得到相应的sql的 工具》SQL Server Profiler》 第一步:连接
一、用数据库监视看
先排除EF自身的另一种方法看EF执行的SQL语句
方法:使用sqlserver中的sqlprofiler 监测工具,这个每次执行都会得到相应的sql的
工具》SQL Server Profiler》
第一步:连接
第二步:直接默认,直接点“运行”
如果有数据库操作就可以看到了,
如果你嫌弃,记录太多,你可以在
菜单栏》编辑》清除跟踪窗口
或者
菜单栏下边的工具栏上面有个橡皮檫,也是“清除跟踪窗口”的功能
二、关于EF的
在EF 6之前,我们使用数据库跟踪工具或第三方跟踪实用程序跟踪由Entity Framework发送的数据库查询和命令。 现在,EF 6提供了一个简单的机制来记录Entity Framework所做的一切。 它使用context.database.Log记录EF执行的所有活动。
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace HaoSiJia.DAL
{
public class ProductDAL
{
/// <summary>
/// 增加产品
/// </summary>
/// <param name="productType"></param>
/// <returns>1:成功</returns>
public int ProductAdd(Product product, out int Id)
{
using (HaoSiJiaEntities hsjDB = new HaoSiJiaEntities())
{
//清除所有字符信息
Logger.sb.Clear();
//记录EF执行的所有活动
hsjDB.Database.Log = Logger.Log;
Product _product = new Product();
_product = product;
hsjDB.Product.Add(_product);
try
{
if (hsjDB.SaveChanges() > 0)
{
Id = _product.ProductID;
return 1;
}
else
{
Id = 0;
return 0;
}
}
catch (Exception ex)
{
//捕获EF信息,写进日志文件里
LogHelper.Error(Logger.sb.ToString());
//捕获异常信息,写进日志文件里
ex.RecordErrorLog();
Id = 0;
return 0;
}
}
}
}
public class Logger
{
//存放EF信息
public static StringBuilder sb=new StringBuilder();
//记录EF信息的方法
public static void Log(string message)
{
sb.Append(message);
}
}
}
我们在顶部
//记录EF执行的所有活动
hsjDB.Database.Log = Logger.Log;
hsjDB.Database.Log这个语句是记录EF执行的所有活动
重点:代码会执行到
try
{
if (hsjDB.SaveChanges() > 0)
{
这里的时候,去执行Logger.Log方法;
下面这段代码
//存放EF信息
public static StringBuilder sb=new StringBuilder();
如注释所说,是存放信息的;
记录EF的完整信息如下:
Logger.sb
{
Opened connection at 2020/6/12 星期五 15:41:34 +08:00
Started transaction at 2020/6/12 星期五 15:41:34 +08:00
INSERT [dbo].[Product]([ProductTypeID], [Name], [Price], [Summary], [Detail], [Status], [Is_top], [Is_red], [Is_hot], [Add_time], [Update_time], [Sort_id], [I_Click], [Image_url])
VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13)
SELECT [ProductID]
FROM [dbo].[Product]
WHERE @@ROWCOUNT > 0 AND [ProductID] = scope_identity()
-- @0: '2' (Type = Int32)
-- @1: '锤子1' (Type = AnsiString, Size = 500)
-- @2: '1' (Type = Decimal, Precision = 10, Scale = 2)
-- @3: '内容摘要内容摘要' (Type = AnsiString, Size = 500)
-- @4: '<p>
内容描述
</p>
<p>
内容描述
</p>
<p>
内容描述
</p>
<p>
内容描述
</p>
<p>
内容描述
</p>' (Type = AnsiString, Size = -1)
-- @5: '1' (Type = Int32)
-- @6: 'False' (Type = Boolean)
-- @7: 'False' (Type = Boolean)
-- @8: 'True' (Type = Boolean)
-- @9: '2020/6/12 星期五 15:40:37' (Type = DateTime2)
-- @10: '2020/6/12 星期五 15:41:27' (Type = DateTime2)
-- @11: '99' (Type = Int32)
-- @12: '1' (Type = Int32)
-- @13: '/File/Upload/image/20200612/20200612154102_2844.png' (Type = AnsiString, Size = 300)
-- Executing at 2020/6/12 星期五 15:41:34 +08:00
-- Completed in 29 ms with result: SqlDataReader
Committed transaction at 2020/6/12 星期五 15:41:34 +08:00
Closed connection at 2020/6/12 星期五 15:41:34 +08:00
} System.Text.StringBuilder
获取信息的方法是: Logger.sb.ToString()
如果是控制台
using (var context = new SchoolDBEntities())
{
context.Database.Log = Console.Write;//记录EF活动,并输出
var student = context.Students
.Where(s => s.StudentName == "Student1").FirstOrDefault<Student>();
student.StudentName = "Edited Name";
context.SaveChanges();
}
讲到这里就完了!