是否可以将 mvc-mini-profiler 与类型化数据集一起使用?
Posted
技术标签:
【中文标题】是否可以将 mvc-mini-profiler 与类型化数据集一起使用?【英文标题】:Is it possible to use the mvc-mini-profiler with typed datasets? 【发布时间】:2011-11-17 22:20:02 【问题描述】:我一直在尝试在 ASP.NET 网站上使用 mvc-mini-profiler。所有的请求分析都能完美运行,但现在我想看看是否有办法将它挂接到我们的数据库调用中。
我们网站上的所有数据库调用都是通过使用带有表和查询表适配器的类型化数据集(.xsd 文件)来完成的。是否有可能以某种方式将 mvc-mini-profiler 与这些数据集挂钩?
我知道您通常会获得某种 dbconnection(SqlConnection 等),然后使用探查器的 ProfiledDbConnection 包装它。我只是不知道如何对数据集执行此操作,甚至可能吗?
注意:从使用数据集更改为 linq2sql 或其他方式实际上并不可行,因为这是一个已经存在一段时间的相当大的项目。
数据库调用示例
DAL_ClientTableAdapters.ClientTableAdapter tba = new DAL_ClientTableAdapters.ClientTableAdapter();
DAL_Client.ClientDataTable dt = tba.GetData();
其中有一个 DAL_Client.xsd 文件,其中包含一个名为 Client
的表适配器,它使用 web.config 中定义的连接字符串
【问题讨论】:
您如何加载数据集 - DataSet.Load? IDataReader 来自哪里 - 您自己的数据库连接?您不能为此使用配置文件连接吗? 不,有一个 .xsd 文件。我只是得到这样的数据:DAL_ClientTableAdapters.ClientTableAdapter tba = new DAL_ClientTableAdapters.ClientTableAdapter(); DAL_Client.ClientDataTable dt = tba.GetData();
这是一个类型化的数据集,连接在 web.config 中的 connectionString 中。
@rup 用评论更新了问题
【参考方案1】:
正如 Darin Dimitrov 指出的那样,你不能真正做到这一点。您可以修改代码生成器以将 TableAdapter 的 Connection
属性设置为 public,这样您就可以传入自己的 Connection。但是SqlConnection
是一个sealed 类,所以你不能通过向它添加分析钩子来扩展它...
可能的解决方法:
您可以通过在您的数据库调用周围添加分析“步骤”来获取基本的时间信息。但是您不会像常规 db 调用那样在 UI、总 SQL 时间或有关查询的命令和参数的详细信息中获得特别突出显示。如果这些很重要,我认为您可以扩展 miniprofiler 代码以帮助计时。我认为是这样的:
DAL_ClientTableAdapters.ClientTableAdapter tba = new DAL_ClientTableAdapters.ClientTableAdapter();
DAL_Client.ClientDataTable dt = null;
//if you are not familiar with miniprofiler Steps, this adds the elapsed time between the curly braces to your timing information
using(MiniProfiler.StepStatic("Executing GetData() from 'Client' table"))
dt = tba.GetData();
您会得到以下结果:
尝试更改代码生成器以将DbConnection
添加到生成的文件中,而不是SqlConnection
。不知道类型化的数据集或您的代码是否使用任何特定于 SqlConnection 的东西,但对于一个古老的大型项目来说听起来相当冒险......
尝试使用Moles 将分析挂钩插入到SqlConnection。好吧,这不是很认真...
【讨论】:
在我们将这些类型化的数据集转换为 linq2sql 之前,包装数据库调用以获取它们的时间似乎是最好的解决方法。谢谢!【参考方案2】:AFAIK 不支持这种情况。当您生成强类型表适配器时,Visual Studio 设计器会自动生成使用特定数据访问类的类:SqlConnection、SqlCommand、... mini-profiler 的工作方式是将实际底层连接包装在 @987654321 中@。这个类派生自DbConnection
,你不能将它传递给表适配器,因为它依赖于SqlConnection
。
迷你分析器可以与不依赖于硬编码的特定 DbConnection 实现但与抽象和提供程序一起使用的数据访问层一起使用。
【讨论】:
感谢您提供的信息,我认为这不太可能,但想问一下,以防我忽略了什么。以上是关于是否可以将 mvc-mini-profiler 与类型化数据集一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
MVC-Mini-Profiler - Web 表单 - 找不到 /mini-profiler-results