今天我已經放棄了一個我在過去一個月左右沒有使用過的項目。我已經使用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>
不太清楚,我在這裏失蹤。我甚至需要用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分析?我通過文檔挖掘高低,但以新的方式融入了很多信息,而且我很難區分今天的「正確」方式。
嘗試用'MiniProfilerEF.Initialize_EF42()'替換您的'Initialize'調用。 – Blindy
'Initialize_EF42'將會被推送到2.0版的nuget ....它不存在於1.9.1 –