我有一个使用BLL和DAL的MVC 4 Web应用程序。 DAL使用EF6和模型第一种方法。我想设置MiniProfiler来分析Web和数据库调用。我已经通过Nuget添加了MiniProfiler和MiniProfiler.MVC4,它已在网站上运行。
我的问题是,如何设置BLL和DAL以返回带有查询信息的EF调用?
以下是项目的设置方式:
Web Layer - 对MiniProfiler,MiniProfiler.MVC和BLL Project的引用。控制器调用BLL方法。
BLL - 参考MiniProfiler和DAL项目。 BLL方法调用DAL方法。
DAL - 参考MiniProfiler和MiniProfiler,EF5。 DAL方法使用Linq调用数据库。
基于该设置,我可以从BLL获取MiniProfiler数据,但我没有获得任何EF SQL数据。
答案 0 :(得分:1)
好的,我明白了。以下是如何设置N-Tier项目以支持MiniProfiler:
Web Layer - 添加对MiniProfiler,MiniProfiler.MVC,MiniProfiler.EntityFramework和BLL Project的引用。在Global.asax中,确保打开EF Profiling:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Entity Framework Profiling
MiniProfilerEF.Initialize();
}
以下是控制器调用BLL并进行性能分析的示例:
[HttpGet]
public ActionResult Index()
{
var profiler = MiniProfiler.Current;
using (profiler.Step("Web Controller"))
{
Employee bll = new Employee();
int value = bll.GetLastEmployeeID();
}
return View();
}
BLL - 添加对MiniProfiler和DAL项目的引用。 BLL方法调用DAL方法。
以下是使用分析调用DAL的BLL方法示例:
public int GetLastEmployeeID()
{
int result = 0;
var profiler = MiniProfiler.Current;
using (profiler.Step("BLL - GetLastEmployeeID"))
{
EmployeeDAO dao = new EmployeeDAO();
result = dao.GetLastEmployeeID();
}
return result;
}
DAL - 添加对MiniProfiler和MiniProfiler,EF5的引用。 DAL方法使用Linq调用数据库。例如:
public int GetLastEmployeeID()
{
int id = 0;
using (var context = new CompanyEntities())
{
var lastEmployee = (from e in context.Employees
where e.IsDeleted == false
orderby e.EmployeeID descending
select e).First();
id = lastEmployee.EmployeeID;
}
return id;
}
使用此设置,我可以使用SQL进行EF分析,以在网站上的MiniProfiler中显示。