Учитывая этот фрагмент кодаКак передать соединение MVC-мини-профайлер для базового класса из MVC3
public abstract class Foo
{
private static SqlConnection _sqlConnection;
protected SqlConnection GetOpenConnection()
{
if (_sqlConnection == null)
{
_sqlConnection = new SqlConnection("connection string");
}
return _sqlConnection;
}
protected abstract void Execute();
}
public class FooImpl : Foo
{
protected override void Execute()
{
var myConn = GetOpenConnection();
var dog = myConn.Query<dynamic>("select 'dog' Animal");
var first = dog.First();
string animalType = first.Animal;
// more stuff here
}
}
Как бы вы обернуть соединение в профилированной связи, если у вас нет доступа к процесс создания соединения? Перепишите код в суперклассе и заверните его там? Это потребует изменения сотен классов, которые наследуются от базы. Я бы предпочел способ изменить базовый класс с минимальными изменениями, необходимыми для суперсовместимости.
Спасибо, Стивена
Nice; в то время как это * немного * раздражает необходимость взломать создание соединения, результаты обычно достаточно просвечивают, чтобы отбросить кислый вкус; p –
Полностью, я просто показал это своим разработчикам, и лампочки начали мигать. –
Все становится лучше. Я показал нашему DBA запросы, которые, как я думал, выполнял, они приходили около 150 мс, и первое, что он сказал, было: «Вы знаете, изменили ли вы этот параметр от nvchar (4000) до varchar (15), чтобы получить лучшую производительность «да, мы сделали ВСЕ вопросы, которые пришли сейчас в возрасте до 10 м. Священный дерьмо! По спецификации http://code.google.com/p/dapper-dot-net/ Ansi Strings и varchar –