使用Glimpse与Microsoft.Practices.EnterpriseLibrary.Data;

时间:2016-11-11 16:05:19

标签: c# .net glimpse

我正在尝试将Glimpse添加到我的网络应用程序中。它工作正常,但我缺少一个最好的功能 - 即能够查看每页上运行多少SQL查询。

我的应用程序使用的是相当旧的学校Microsoft.Practices.EnterpriseLibrary.Data;创建数据库实例,然后运行存储过程以返回数据。

我找到了一个Glimpse EnterpriseLibrary.Data nuget包here,我认为它可能有用,但它不是我需要的

查看Microsoft.Practices.EnterpriseLibrary.Data;在我的DAL层中,它是版本5.0.414.0和运行时版本v2.0.50727。上面的企业库nuget包依赖于更高版本的Enterprise library.data,我不想在它破坏的情况下升级它。

这是我当前的数据库图层代码的外观:

// Some method to get data
Database db = MyDatabaseFactory.MyDB;

var sqlCmd = new SqlCommand(StoredProcedures.MyStoredProc);
sqlCmd.CommandType = CommandType.StoredProcedure;

using (IDataReader dr = db.ExecuteReader(sqlCmd))
{
//Impl removed for brevity

我的数据库工厂看起来像:

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace MyProj.DAL
{
    class MyDatabaseFactory
    {
        internal static Database MyDB
        {
            get
            {                
                return DatabaseFactory.CreateDatabase("MyDB");               
            }
        }

无论如何我可以使用反射,以便Glimpse能够检查SQL运行吗?

我以为我可以使用与上面Nuget包使用的代码类似的东西 - 只是不确定要做什么更改,所以GlimpseSqlDatabase继承自Database而不是SqlDatabase:

public class GlimpseSqlDatabase : SqlDatabase
{
    private static readonly FieldInfo dbProviderFactoryField =
        typeof(Database).GetField("dbProviderFactory", BindingFlags.Instance | BindingFlags.NonPublic);

    public GlimpseSqlDatabase(string connectionString)
        : base(connectionString)
    {
        dbProviderFactoryField.SetValue(this, DbProviderFactories.GetFactory("System.Data.SqlClient"));
    }
}

0 个答案:

没有答案