在N层框架中使用MiniProfiler

时间:2014-04-07 00:23:57

标签: entity-framework mvc-mini-profiler

我有一个使用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数据。

1 个答案:

答案 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中显示。