1

今天我已經放棄了一個我在過去一個月左右沒有使用過的項目。我已經使用MiniProfiler 1.7配置了這個項目,並且全世界都很好。它分析了我的數據庫調用和視圖性能。從1.7升級到MvcMiniProfiler 1.9 .NET MVC3和EF代碼優先

我決定升級到1.9,我遇到了幾個減速帶。現在,我已經解決了大部分問題。唯一看起來「錯誤」的是DB分析。我越來越下降了死亡的黃色畫面,出現以下錯誤:

A null was returned after calling the 'get_ProviderFactory' method on a store 
provider instance of type 'MvcMiniProfiler.Data.ProfiledDbConnection'. 
The store provider might not be functioning correctly. 

作爲參考,讓我告訴你我是如何在1.7與MVC3和EF 4.1代碼第一次有miniprofiler設置。

的web.config

<system.data> 
<DbProviderFactories> 
    <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" /> 
    <add name="MvcMiniProfiler.Data.ProfiledDbProvider" 
     invariant="MvcMiniProfiler.Data.ProfiledDbProvider" 
     description="MvcMiniProfiler.Data.ProfiledDbProvider" 
     type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" /> 
</DbProviderFactories> 

Global.asax中處理的事情都是從那裏。我將列出現在不存在的相關Application_Start()代碼。

#region MVC Mini Profiler related database profiling config/setup 

     //This line makes SQL Formatting smarter so you can copy/paste 
     // from the profiler directly into Query Analyzer 
     MiniProfiler.Settings.SqlFormatter = new SqlServerFormatter(); 

     var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString); 
     var profiled = new ProfiledDbConnectionFactory(factory); 
     Database.DefaultConnectionFactory = profiled; 

#endregion 

在我的上下文中的最後一步是在異形連接掛鉤:

public class Database : DbContext 
{ 
    public Database() 
     : base(GetProfilerConnection(), true) 
    {} 

    private static DbConnection GetProfilerConnection() 
    { 
     return 
      ProfiledDbConnection.Get(
       new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString)); 
    } 
} 

快進到今天,我已經重新設計的東西使用MVC3 minprofiler NuGet包和EF miniprofiler的NuGet包,但我迷失在如何讓DB分析工作再次工作。

我已將我的web.config修改爲以下版本,其中似乎是需要的,但ReSharper先不開心。

<system.data> 
<DbProviderFactories> 
    <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" /> 
    <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" 
     description="MvcMiniProfiler.Data.ProfiledDbProvider" 
     type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler.EntityFramework, Version=1.9.1.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" /> 
</DbProviderFactories> 

enter image description here

不太清楚,我在這裏失蹤。我甚至需要用MiniProfilerEF.Initialize();調用嗎?一些文檔和建議似乎表明你甚至不需要這個了。

更大的問題是如何在1.9中設置DB分析。

我以前在Global.asax中的相關代碼現在已移入App_Start文件夾中的MiniProfiler.cs中。我覺得這個設置應該是一樣的,但似乎並不是這樣。

我想這樣做(也許是因爲這正是我所熟悉的1.7)

//TODO: To profile a standard DbConnection: 
     var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString); 
     var profiled = new ProfiledDbConnectionFactory(factory); 
     Database.DefaultConnectionFactory = profiled; 

這似乎不是不能再工作下去。我還注意到,現在看來我應該使用EFProfiledDbConnection而不是僅僅使用ProfiledDbConnection?它是否正確?

如何開始使用此模型配置DB分析?我通過文檔挖掘高低,但以新的方式融入了很多信息,而且我很難區分今天的「正確」方式。

+0

嘗試用'MiniProfilerEF.Initialize_EF42()'替換您的'Initialize'調用。 – Blindy

+0

'Initialize_EF42'將會被推送到2.0版的nuget ....它不存在於1.9.1 –

回答

2

呃,對不起傢伙。

我解決了這個問題。

我不得不添加的EF MVCMiniProfiler NuGet包在我的數據模型的項目,並更改連接,所以輸入那裏EFProfiledConnection:

 /// <summary> 
    /// Supply our own connection string to the DBContext to utilize mini-profiler for SQL queries as well. 
    /// </summary> 
    /// <returns>DBConnection</returns> 
    private static DbConnection GetProfilerConnection() 
    { 
     return new EFProfiledDbConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString), 
             MiniProfiler.Current); 
    } 

想這應該是很明顯我在看EF是如何打破進入它自己的連接類型。

我也評論了配置設置,所以我可以確認它們不再需要。

我不知道這是否是配置EF和MVC Mini 1.9的「正確」方式,但它是有效的。

我願意接受有關改進的建議,或者如果有更多正確的這樣做,但現在我又恢復正常了。

+0

這是正確的方式.... –

+0

感謝Sam的跟進。 – Khepri

+2

對不起,我試過了,它沒有工作。保留一個錯誤,指出EF無法確定EFProfiledDbConnection的提供者類型。 –