我正在尝试将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"));
}
}