2016-06-13 43 views
0

我在我的項目(Web應用程序)中使用Autofac的DI。我有一個LINQ表達它連接在同一個數據庫這樣的2個不同的表(所有的()是剛剛超過dbSet.AsQueryable包裝())使用Autofac的InstancePerRequest的不同上下文

from repo1 in repository1.All() 
join repo2 in repository2.All() 
    on repo1.SomeField = repo2.SomeField 
..... 

我在註冊我的部件(repo1和repo2)具有InstancePerRequest()的容器生成器。

當我執行我的代碼時,在LINQ代碼中,它會引發以下錯誤:「指定的LINQ表達式包含對與不同上下文關聯的查詢的引用。

我認爲dbContext是通過InstancePerRequest()註冊的組件共享的(每個請求)。

想法?

謝謝!

+1

你的dbContext是如何創建的?它是否也通過autofac註冊?如果是這樣,它是如何登記的? –

+0

當你說它是一個Web應用程序時,你是什麼意思?這是WebApi,WCF,MVC還是其他?你是否在你的應用程序類型中使用了適當的autofac集成庫? –

+0

您不顯示您的「存儲庫」構造函​​數。如果你希望它能夠正常工作,你需要用'PerRequest'註冊你的'DbContext',並讓你的「倉庫」把它注入爲構造函數參數。那麼它就會工作。 –

回答

1

您不顯示您的「存儲庫」構造函​​數。如果你想讓它正常工作,你需要註冊你的DbContext以及PerRequest,並讓你的「倉庫」把它注入爲構造參數。那麼它就會工作。沒有隱含的假設,即註冊組件PerRequest的依賴關係應該在相同的生命週期中實例化。默認情況下,所有組件都是按照依賴項註冊的

+0

謝謝阿列克謝。我錯過了在我的倉庫構造函數中注入的DbContext。現在工作正常。 –

相關問題