2011-12-04 54 views
4

我是新來的MVC和實體框架。原因是什麼:「模型創建時無法使用上下文。」?

我有一個簡單的Azure MVC 3 web應用程序。我使用實體框架和Ninject,我的數據存儲在SQL數據庫中。

每當我嘗試向我的存儲庫發出併發請求時,都會收到此錯誤消息。例如,一個存儲庫是圖像標題,因此加載頁面時,如果存在多個圖片,它通常會失敗,並顯示以下消息:

「上下文無法在模型創建時使用。

這裏是我的連接字符串:

<add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=TheDBName; Integrated Security=SSPI; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> 

對於Ninject,當我結合我試圖改變它使用InTransientScope也InRequestScope接口。沒有不同。

this.ninjectKernel.Bind<ICaptionsRepository>().To<EFCaptionRepository>().InTransientScope(); 

它失敗的部分是在這裏:

Caption foundCaption = currentCaptionRepository.Captions.FirstOrDefault(a => a.ID == pictureID); 

請讓我知道如果你需要任何其他信息,以幫助發現問題。

乾杯!

編輯:這裏是堆棧跟蹤

 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
    at System.Data.Entity.Internal.InternalContext.Initialize() 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
    at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() 
    at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) 
    at MVCProject.WebUI.Controllers.ImageController.GetImageByIDWithSize(String id) in C:\MVCProject\MVCProject\MVCProject.WebUI\Controllers\ImageController.cs:line 131 
    at MVCProject.WebUI.Controllers.ImageController.GetImage(String id) in C:\MVCProject\MVCProject\MVCProject.WebUI\Controllers\ImageController.cs:line 215 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
+1

什麼是堆棧跟蹤? – SLaks

+0

剛剛添加到我的文章。謝謝! – kodikas

+1

調用失敗的代碼在哪裏?只有當你重新啓動應用程序或所有的時間纔會發生?發生這種情況時有多少個併發請求正在運行? –

回答

1

請告訴我背後的DbContext的生活方式嗎?我猜你的倉庫對db上下文有依賴性,如果你的DbContext被註冊爲單例,這將會爆炸。如果是這種情況,請確定您的DbContext pr請求的範圍,創建一個DbContext便宜,並且不打算保留爲單個實例。

+0

嗨,我將它綁定爲InRequestScope。你是這個意思嗎?感謝您回覆這個問題。 – kodikas

+0

這聽起來是正確的,但我仍然把我的錢放在這是一個線程/共享狀態問題:-)你的控制器如何獲得一個存儲庫實例?依賴注入? – Marius

+0

是的,通過Ninject。 – kodikas

相關問題