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: }
  • 相关阅读:
    PHP后门新玩法:一款猥琐的PHP后门分析
    中国菜刀批量导出数据
    渗透测试:反弹与转发小结
    怎样用Java自制优秀的图片验证码?这样!
    6条 Tips 为你照亮 GitHub 寻宝之路
    如何搭建一个“不可告人的”私人专属网盘?教程拿去
    6个炫酷又好用的 Python 工具,个个都很奔放呀
    20个Java练手项目,献给嗜学如狂的人
    如何自己动手写一个搜索引擎?我是一份害羞的教程🙈
    GitHub上个最有意思的项目合集(技术清单系列)
  • 原文地址:https://www.cnblogs.com/chsword/p/MvcMiniProfiler_EF41.html
Copyright © 2011-2022 走看看