首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不更改源代码的情况下将MVCMiniProfiler与PetaPoco集成

如何在不更改源代码的情况下将MVCMiniProfiler与PetaPoco集成
EN

Stack Overflow用户
提问于 2011-08-20 03:05:07
回答 2查看 1.6K关注 0票数 4

我正在尝试让MVCMiniProfilerPetaPoco一起工作

我试图在创建PetaPoco DB时设置连接,但遇到了问题(connectionClosed)

代码语言:javascript
复制
public class DbHelper
{
    static Database _CurrentDb = null;
    public static Database CurrentDb()
    {
        if (_CurrentDb == null)
        {
            string connstr = ConfigurationManager.ConnectionStrings["MainConnectionString"].ConnectionString;
            var conn = ProfiledDbConnection.Get(new SqlConnection(connstr));
            _CurrentDb = new PetaPoco.Database(conn);
        }
        return _CurrentDb;
    }

}

我已经阅读了这个项目的https://github.com/toptensoftware/PetaPoco/issues/44,但可以让它工作

什么才是正确的方法呢?

编辑

该解决方案由Gareth Elms提供:

代码语言:javascript
复制
public class DbHelper
{
    static Database _CurrentDb = null;
    public static Database CurrentDb()
    {
        if (_CurrentDb == null)
        {
            _CurrentDb = new DatabaseWithMVCMiniProfiler("MainConnectionString");
        }
        return _CurrentDb;
    }

}
public class DatabaseWithMVCMiniProfiler : PetaPoco.Database
{
    public DatabaseWithMVCMiniProfiler(IDbConnection connection) : base(connection) { }
    public DatabaseWithMVCMiniProfiler(string connectionStringName) : base(connectionStringName) { }
    public DatabaseWithMVCMiniProfiler(string connectionString, string providerName) : base(connectionString, providerName) { }
    public DatabaseWithMVCMiniProfiler(string connectionString, DbProviderFactory dbProviderFactory) : base(connectionString, dbProviderFactory) { }

    public override IDbConnection OnConnectionOpened( IDbConnection connection)
    {
        // wrap the connection with a profiling connection that tracks timings 
        return MvcMiniProfiler.Data.ProfiledDbConnection.Get( connection as DbConnection, MiniProfiler.Current);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-21 01:34:54

我想知道这是不是因为它是一个静态类。这可能是一些奇怪的连接在请求后自动关闭,以及petapoco的_sharedConnectionDepth计数器不知道它。我很容易用你的代码重现了这段代码。在github https://github.com/GarethElms/PetaPoco----A-simple-web-app上看看我的示例petapoco应用程序,我所要做的就是在基本控制器中实例化数据库

票数 3
EN

Stack Overflow用户

发布于 2012-02-15 17:34:40

如前所述,per请求对于mvc应用程序来说是最好的。这是我使用Ninject的实现

代码语言:javascript
复制
private static void RegisterServices(IKernel kernel)
{


#if DEBUG
            kernel.Bind<IDatabase>().To<DebugDatabase>()
               .InRequestScope()
               .WithConstructorArgument("connectionStringName", "DebugCnnString");
#else
            kernel.Bind<IDatabase>().To<ReleaseDatabase>()
               .InRequestScope()
               .WithConstructorArgument("connectionStringName", "ReleaseCnnString");
#endif
}

public class DebugDatabase : PetaPoco.Database
{
    public DebugDatabase(string connectionStringName) : base(connectionStringName) { }

    public override IDbConnection OnConnectionOpened(IDbConnection connection)
    {
        // wrap the connection with a profiling connection
        return new ProfiledDbConnection(connection as DbConnection, MiniProfiler.Current);
    }
}

public class ReleaseDatabase : PetaPoco.Database
{
    public ReleaseDatabase(string connectionStringName) : base(connectionStringName)    {   }

    // ... some stuff
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7126205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档