zoukankan      html  css  js  c++  java
  • 使用 MvcMiniProfiler 监控EF 4.1 with MySQL Provider

    本文有2个不怎么相关的话题,一是用MVCMiniProfiler 监控EF4.1,另一个则是为MvcMiniProfiler提供MySQL Provider的支持。

    需要在Web.config中添加system.data的节点

       1: <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
       2: <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider"
       3:         description="MvcMiniProfiler.Data.ProfiledDbProvider"
       4:         type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />

    另外在Application_Start设置Database.DefaultConnectionFactory即可

       1: var factory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 
       2: var profiled = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(factory);
       3: Database.DefaultConnectionFactory = profiled;

    当然,使用MySQL的话需要使用MySQL的ConnectionFactory,但是MySQL没有为我们提供,所以我们就自己写一下

       1: class MySqlConnectionFactory : IDbConnectionFactory
       2:         {
       3:             public DbConnection CreateConnection(string nameOrConnectionString)
       4:             {
       5:                 using (MiniProfiler.Current.Step("创建Connection:" + nameOrConnectionString))
       6:                 {
       7:                     var connStr = ConfigurationManager.ConnectionStrings[nameOrConnectionString];
       8:                     return new MySqlConnection(connStr.ConnectionString);
       9:                 }
      10:             }
      11:         }

    然后使用MySqlConnectionFactory来注册

       1: var factory = new MySqlConnectionFactory();
       2: var profiled = new ProfiledDbConnectionFactory(factory);
       3: Database.DefaultConnectionFactory = profiled;

    但是有很多时候使用EF4.1这样做并不会生效我们可能还要为DbContext包装一个基类来实现如下功能

       1: abstract public class BaseDbContext :DbContext
       2:    {
       3:        protected BaseDbContext(string nameOrConnectionString)
       4:            : base(GetConnection(nameOrConnectionString),true)
       5:        {
       6:           
       7:        }
       8:  
       9:        private static DbConnection GetConnection(string nameOrConnectionString)
      10:        {
      11:            if( Database.DefaultConnectionFactory is SqlConnectionFactory)
      12:            {//这个判断是为了解决未使用MySqlConnectionFactory时自动使用SQLServer的问题
      13:                var connStr = ConfigurationManager.ConnectionStrings[nameOrConnectionString];
      14:                return new MySqlConnection(connStr.ConnectionString);
      15:            }
      16:            return Database.DefaultConnectionFactory.CreateConnection(nameOrConnectionString);
      17:        }
      18: }
  • 相关阅读:
    江西理工大学南昌校区cool code竞赛
    喵哈哈村的魔法考试 Round #3 (Div.2) ABCDE
    项目管理概要记录
    JS开发引用HTML DOM的location和document对象
    Linux下触摸屏驱动程序分析
    敦泰FT6X06单层自容调屏
    FT5X06 如何应用在10寸电容屏(linux-3.5电容屏驱动简析&移植10寸电容屏驱动到Android4.2) (by liukun321咕唧咕唧)
    基于FT5x06嵌入式Linux电容触摸屏驱动
    Linux/Android多点触摸协议
    高通 8x12 添加 TP和按键
  • 原文地址:https://www.cnblogs.com/chsword/p/MvcMiniProfiler_EF41.html
Copyright © 2011-2022 走看看