2012-02-27 72 views
5

我首先在我的mvc3項目中使用EF 4.2代碼。MiniProfiler,EntityFramework代碼優先和後臺任務nullreference

miniprofiler工作正常(sql + mvc),但我有異步任務的問題。

我進行「時間這種方式(是這個方法好,我覺得有點不安與此new DatabaseContext()?)中的Application_Start

public static void PerformAsycAction(this User user, Action<User> action) 
{ 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
    var context = new DatabaseContext(); 
    MiniProfilerEF.Initialize(); 
    var consistantUser = context.Set<User>().Get(user.Id); 
    action(consistantUser); 
    context.SaveChanges(); 
    }); 
} 

我有合適的線路:

protected void Application_Start() 
    { 
     MiniProfilerEF.Initialize(); 
     ... 
    } 

在第一次操作期間引發的興奮與db在action(consistantUser); 這裏是痕跡:

在MvcMiniProfiler.MiniProfiler.AddSqlTiming(SqlTiming數據)在C:\用戶\ SAM \桌面\ MVC-微型分析器\ MvcMiniProfiler \ MiniProfiler.cs:線274 在MvcMiniProfiler.SqlTiming..ctor(的DbCommand命令,ExecuteType在C:\ Users \ sam中的MvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommand命令,ExecuteType類型)中的C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs:行137 \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs:第39行 位於C:\ Users \ sam \ Desktop \ mvc-mini-profiler \中MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler,DbCommand命令,ExecuteType類型) MvcMiniProfiler \ SqlProfiler.cs:第93行 位於MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart(DbCommand profiledDbCommand,Exe C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.IDbProfiler.cs:line 14 at MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ Data \ ProfiledDbCommand.cs:第158行 位於System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行爲) 位於System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior )

我做錯了什麼? 任何幫助將不勝感激。

編輯:我試圖重新初始化MiniProfiler(MiniProfilerEF.Initialize();),在backgroung任務performd(啓動DatabaseContext之前)的線程,現在有另一種情況例外:

無法轉換的對象類型'MvcMiniProfiler.Data.EFProfiledDbConnection爲鍵入「System.Data.SqlClient.SqlConnection

事實上,這不是neccessary個人資料在後臺線程的查詢,但它崩潰整個線程,所以應用程序無法正常工作,我不得不disavble整個探查器。有沒有辦法禁用它的背景,線程,以防止它崩潰?

+0

什麼是實際例外? – 2012-02-27 20:20:09

+0

NullReferenceException – 2012-02-27 20:22:21

+0

您是否驗證過您沒有將null傳入任何這些函數? – 2012-02-27 20:23:15

回答

1

當它嘗試訪問連接字符串時,代碼會中斷,因爲連接字符串是實體框架樣式連接字符串。

將連接字符串傳遞給mini-profiler時,必須從EF連接字符串中提取實際的連接字符串。

EntityConnection connection = 
    new EntityConnection(ConfigurationManager 
        .ConnectionStrings["ConnectionStringName"].ConnectionString)); 

string connectionString = connection.StoreConnection.ConnectionString;