Как настроить профилировщик mvc mini с Linq to SQL?

Я настроил мини-профайлер с приложением asp.net mvc. Я также хочу профилировать свою базу данных, поэтому я подключил ее к тексту данных L2S, как в этом примере < / а>.

Он отлично работает для некоторых запросов, но в других запросах я нахожу исключение с нулевой ссылкой. Когда я прикрепил исходный код для отладки, я обнаружил, что

 internal void AddSqlTiming(SqlTiming stats)
        {
            Head.AddSqlTiming(stats);
        }

Head Свойство в приведенном выше методе имеет значение null в MiniProfiler.cs в строке 198. Есть идеи, почему?

EDIT: следующий метод возвращает мне объект datacontext

public static EvoletDataContext Get() 
        {
            var connection = ProfiledDbConnection.Get(new SqlConnection(ConfigurationManager.ConnectionStrings["evoletworksConnectionString"].ToString()));
            //var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["evoletworksConnectionString"].ToString());
            //return new EvoletDataContext(connection);
            return DataContextUtils.CreateDataContext<EvoletDataContext>(connection);
        }

А ниже - запрос, при котором минипрофайл вылетает впервые.

public sysModule GetModuleHead(string actionName)
        {
            var val =  (from mod in db.sysModules
                        where
                        mod.ModuleActionResult.ToLower().Equals(actionName.ToLowerInvariant())
                    select mod).SingleOrDefault();
            return val;


        }

Для получения дополнительных сведений см. Также этот вопрос . Я пытался, но не смог воспроизвести проблему в демонстрационном проекте.

Редактировать 2: Вот трассировка стека:

[NullReferenceException: Object reference not set to an instance of an object.]
   MvcMiniProfiler.MiniProfiler.AddSqlTiming(SqlTiming stats) in C:\Dev\mvc-mini-profiler\MvcMiniProfiler\MiniProfiler.cs:241
   MvcMiniProfiler.SqlTiming..ctor(DbCommand command, ExecuteType type, MiniProfiler profiler) in C:\Dev\mvc-mini-profiler\MvcMiniProfiler\SqlTiming.cs:66
   MvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommand command, ExecuteType type) in C:\Dev\mvc-mini-profiler\MvcMiniProfiler\SqlProfiler.cs:50
   MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler, DbCommand command, ExecuteType type) in C:\Dev\mvc-mini-profiler\MvcMiniProfiler\SqlProfiler.cs:95
   MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\Dev\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:149
   System.Data.Common.DbCommand.ExecuteReader() +12
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +724
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +189
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +659
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +59
   System.Linq.Queryable.SingleOrDefault(IQueryable`1 source) +265
   UserManagement.Models.FilterRepository.GetModuleHead(String actionName) in D:\Evolet\UserManagement\UserManagement\Models\FilterRepository.cs:14
   UserManagement.Models.DummyAttrib.OnAuthorization(AuthorizationContext filterContext) in D:\Evolet\UserManagement\UserManagement\Models\Filters.cs:30
   Glimpse.Net.Plumbing.GlimpseAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext) +157
   System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +149
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +830
   System.Web.Mvc.Controller.ExecuteCore() +135
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +232
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +68
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +140
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +61
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +31
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +56
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +110
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +690
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194

person Muhammad Adeel Zahid    schedule 21.06.2011    source источник
comment
Здесь будет полезен какой-то пример кода   -  person Marc Gravell    schedule 30.06.2011
comment
и точно такой же запрос работает без мини-профилировщика? Могу ли я тогда проверить, db не равно нулю? и actionName? Если они не равны нулю, можете ли вы включить StackTrace из Exception, чтобы я мог видеть, откуда это происходит?   -  person Marc Gravell    schedule 01.07.2011
comment
ага без мини-профилировщика все работает. db и actionname также не равны нулю. в stackoverflow.com/questions/6410756/ Я включил трассировку стека исключения, но боюсь, что изображение довольно сжато SO   -  person Muhammad Adeel Zahid    schedule 01.07.2011
comment
просто включите текст; p   -  person Marc Gravell    schedule 01.07.2011
comment
никогда не думал вставлять текст напрямую: O   -  person Muhammad Adeel Zahid    schedule 01.07.2011
comment
@Muhammed выходные - были заняты жизнью   -  person Marc Gravell    schedule 03.07.2011
comment
@Marc хорошо провести время. Спасибо за ответ   -  person Muhammad Adeel Zahid    schedule 03.07.2011


Ответы (2)


Раньше это происходило, если у вас был ProfiledDbConnection в игре, а фактический профилировщик был установлен на null.

В общем, мы избегаем обслуживания наших внутренних потребителей ProfiledDbConnection, если текущий запрос не профилирован ... это означает, что все работает немного быстрее.

К сожалению, это может быть сложно сделать с EF и L2S. Чтобы преодолеть это, я только что внес изменение, которое позволяет вам использовать специальные объекты профилирования, даже если профилировщик не задействован.

Тем не менее, я по-прежнему рекомендую вам по возможности использовать сырые соединения, когда вы не профилируете.

person Sam Saffron    schedule 19.07.2011
comment
Кто нибудь пробовал с последней версией? Похоже, проблема все еще существует. - person developer; 18.08.2011
comment
Я наблюдаю точно такое же поведение даже сейчас. Я просто вытаскиваю Update-Package MiniProfiler из nuget. - person Chase Florell; 21.11.2011
comment
@ChaseFlorell, вам нужно будет получить последнюю версию кода Google - person Sam Saffron; 21.11.2011
comment
ааааааааааааааааааааааааааааааудаудаля граница нугет? - person Chase Florell; 21.11.2011
comment
@ChaseFlorell, план состоит в том, чтобы в ближайшее время выпустить еще один выпуск, мы хотим разбить все пространства имен, потому что штука MVC вводит в заблуждение. - person Sam Saffron; 21.11.2011
comment
Все еще существует в 1.9. По крайней мере, при попытке внедрить зависимость в настраиваемый RoleProvider. Не уверен, почему запрос не профилирован, так и должно быть. Я думаю, что что-то еще не инициализировано правильно, возможно, структурная карта. - person nportelli; 19.03.2012

Похоже, эта проблема наконец-то исправлена ​​в последней фиксации:

https://github.com/SamSaffdron/MiniProfilerf7c5c5c8c5c8c8c8c8c8c8c8c8c8c8c8c8c8cfc8cfcfcfcfcfcfcfcfcfc8c8

person Michael Hart    schedule 19.10.2011