2011-08-31 52 views
9

我有一個使用mvc-mini-profiler的asp.net項目。我使用的是NuGet版本1.7,我注意到有一個更新的版本爲1.9的軟件包。我更新了包,現在我的代碼不再編譯。失敗編譯的代碼是:迷你探查器從1.7升級到1.9打破現有代碼

public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext 
{ 
    var conn = GetStoreConnection<T>(); 
    if (_enableProfiling) 
    { 
     conn = ProfiledDbConnection.Get(conn); 
    } 
    return ObjectContextUtils.CreateObjectContext<T>(conn); 
} 

的編譯錯誤報告以下問題:

  • 「MvcMiniProfiler.Data.ProfiledDbConnection」不包含「獲取」的定義。
  • 名稱'ObjectContextUtils'在當前上下文中不存在。

我注意到我可以創建一個ProfiledDbConnection的實例,並將它傳遞給連接和一個IDbProfiler類型的對象,但我不知道該如何獲得該對象。

關於ObjectContextUtils,我不知道我應該使用什麼線索。

我該如何解決這些問題?


更新:

通過以下@ monkeychatter的建議,我設法建立的代碼。我現在得到以下運行時異常:

空被調用類型「MvcMiniProfiler.Data.ProfiledDbConnection」的存儲提供實例的「get_ProviderFactory」方法後返回。商店提供商可能無法正常運作。

通過檢查ILSpy中的ProfiledDbConnection,我注意到它不再覆蓋DbProviderFactory。這似乎是錯誤的原因,因爲基本實現返回null。有沒有人能夠解決這個問題?

回答

12

我剛剛經歷過相同的不幸的是,大多數/所有文檔都顯示「舊」的方式。大部分功能已移至ProfiledDbConnection類本身。要在ProfiledDbConnection上獲得ObjectContext擴展,還需要引用nuget包「MiniProfiler.EF」中的程序集。以下是在1.9中獲得等效代碼的編輯。

//reference extension from MvcMiniProfiler.Data 
using MvcMiniProfiler.Data; 

var conn = GetStoreConnection<T>(); 
if (_enableProfiling) 
{ 
    //conn = ProfiledDbConnection.Get(conn); 
    conn = new ProfiledDbConnection(conn, MiniProfiler.Current); 
} 
//return ObjectContextUtils.CreateObjectContext<T>(conn); 
return conn.CreateObjectContext<T>(); 

更新: 每更新的問題,我將代替我以前如下解決方案就行了。這包括修復ProviderFactory問題的重寫:

//conn = new ProfiledDbConnection(conn, MiniProfiler.Current); 
    conn = new EFProfiledDbConnection(conn, MiniProfiler.Current); 
+0

我在ProfiledDbConnection上找不到CreateObjectContext方法。你確定上面的代碼是正確的嗎? –

+0

好點,謝謝。我忘了提到它來自一個附件nuget包MiniProfiler.EF,其中包含程序集MvcMiniProfiler.EntityFramework。回答編輯以反映這一點。 – tonysurma

+0

謝謝,這有幫助。但是,我仍然有問題。我用更多的信息更新了我的問題。 –