Вы можете попробовать что-то вроде этого.
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, SqlDatabase, он не выглядиткак будто есть действительно простой способ достичь этого.Сожалею.Я знаю, что это так.
Похоже, это проблема Mvc-Mini-Profiler.Если вы посмотрите на эту Issues 19 Link на домашней странице проекта MVC-Mini-Profiler, вы увидите, что другие люди сталкиваются с такой же проблемой.
Я потратил довольно много времени на то, чтобы System.Data.SqlClient с Reflector и ProfiledDbProviderFactory пытался выяснить, в чем проблема, и, похоже, в следующем заключается проблема.Это можно найти в классе ProfiledDbProviderFactory.
public override DbDataAdapter CreateDataAdapter()
{
return tail.CreateDataAdapter();
}
Теперь проблема не совсем в этом коде, а в том, что когда класс Microsoft.Practices.EnterpriseLibrary.Data.Database
вызывает экземпляр DbDataAdapter
(tail в нашем случае - SqlClientFactory)он создает SqlClientFactory Command
, а затем пытается установить для Connection
этой команды значение ProfiledDbConnection
, и это будет его поломкой.
Я пытался создать свои собственные классы Фабрики, чтобы обойти это, но я просто слишком растерялся.Возможно, когда у меня будет немного свободного времени, я попытаюсь разобраться с этим, если SO команда не побеждает меня в этом.:)