你可以尝试这样的事情。
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand(PROC);
ProfiledDbCommand cmd = new ProfiledDbCommand(dbCommand, dbCommand.Connection, MvcMiniProfiler.MiniProfiler.Current);
db.AddInParameter(cmd, "foo", DbType.Int64, 0);
DbConnection dbc = MvcMiniProfiler.Data.ProfiledDbConnection.Get(dbCommand.Connection, MiniProfiler.Current);
DataSet ds = db.ExecuteDataSet(dbc);
更新 :
在通过 EntLib Data 源代码 SqlDatabase 进行了大量搜索之后,看起来并没有一个简单的方法来实现这一点。对不起。我知道我是。
这实际上似乎是 Mvc-Mini-Profiler 的一个问题。如果您在 MVC-Mini-Profiler 项目主页上查看此问题 19 链接,您会看到其他人也有同样的问题。
我已经花了很长时间通过 System.Data.SqlClient 与 Reflector 和 ProfiledDbProviderFactory,试图查看问题是什么,似乎以下是问题所在。这可以在 ProfiledDbProviderFactory 类中找到。
public override DbDataAdapter CreateDataAdapter()
{
return tail.CreateDataAdapter();
}
现在问题不完全在于这段代码,而是当Microsoft.Practices.EnterpriseLibrary.Data.Database
类调用DbDataAdapter
(在我们的例子中是 SqlClientFactory)的实例时,它会创建SqlClientFactory Command
,然后尝试Connection
将此命令设置为ProfiledDbConnection
,这就是它中断的事实。
我已经尝试创建自己的工厂类来解决这个问题,但我太迷失了。也许当我有空闲时间时,我会尝试解决这个问题,除非 SO 团队击败我。:)