我有一个 2 层 Web 应用程序。数据访问和网站。
因此,在我dataContext.cs
的 DataAccess 层中,我添加了包装器...
//The autogenreated context when I made the linq2sql class
public static MyDataContext DataContext
{
get
{
//We are in a web app, use a request scope
if (HttpContext.Current != null)
{
if (HttpContext.Current.Items["dc"] == null)
{
MyDataContext dc = new MyDataContext ();
HttpContext.Current.Items["dc"] = dc;
return dc;
}
else
return (MyDataContext )HttpContext.Current.Items["dc"];
}
else
{
if (dataContext == null)
dataContext = new MyDataContext ();
return dataContext;
}
}
}
//the method I added to the autogenreated contex in
//an attempt to wrap the profiler around it
public static MyDataContext Get()
{
var sqlConnection = new MyDataContext().Connection;
var profiledConnection = new StackExchange.Profiling.Data.ProfiledDbConnection(sqlConnection, MiniProfiler.Current);
return new MyDataContext(profiledConnection);
}
所以这就是 profileConnection 在被调用时但在调用之前的样子return New MyDataContext(porofiledConnection)
并且在我的业务逻辑中也在 DataAccess 层中,我确保数据库上下文都是用db = MyDataContext.Get()
而不是db = new MyDataContext();
public class MyOrders(){
private static MyDataContext db = MyDataContext.Get();
public static List<model> GetOrderHistory(){
var = db.MyStoredProcedure(args) //Inspecting here before execution
//proces result and return list of model
}
}
现在,在某些页面上,我曾经获取 SQL 行,我可以单击它们并检查它们。但是在我浏览了该站点后,它只显示了这一点-不再有 SQL 行了吗?就像这个页面一样,它只是随机地向我显示 SQL 重复 - 但如果我重新加载它就消失了。
在此页面上,我之前从未使用探查器运行过加载时间问题,但我无法识别它使用的 SQL。
我错过了什么?SQL 是否被缓存?即使 Linq2Sql 缓存它或其他什么,我也总是想查看 SQL。我做错什么了?