0

我正在使用實體框架使用帶有DI(Ninject)的通用存儲庫模式的ASP.NET MVC3。在同一查詢中不同項目的不同存儲庫

我有一個主要項目,其他網站連接到它。主項目有它自己的域存儲庫,它連接到數據庫中的常規表。每個連接到它的站點都有自己的域名庫,它連接到它自己的數據庫表。我的問題是,當我嘗試執行將主站項目表與站點表組合在一起的複雜linq查詢時,代碼不會喊,他不能在同一個查詢中使用兩個不同的dbcontext。所以我必須劃分我的查詢並從一個存儲庫表(ToList())中提取數據,然後才能在其他存儲庫表中使用它。從我看的地方看,我不能在兩個存儲庫中使用相同的DbContext,因爲主項目是作爲站點項目的Dll。

+0

我重申了你的問題。通過在標籤中添加'ninject',希望其中一位Ninject專家能夠向您解釋如何配置Ninject以根據您的情況獲取每個Web請求。 – Steven

+0

@Steven:謝謝:) –

回答

2

你自己給出了答案。對於單個查詢,您不能使用多個DbContext實例(當您考慮此問題時這很明顯)。而是在單個Web請求中爲所有存儲庫使用單個實例。 Ninject有一個Per Web Request lifestyle

+0

這個問題是主要的項目資源庫作爲站點項目的dll。 –

+0

這是爲什麼?所有程序集都運行在同一個Web應用程序中(在同一個應用程序域中)?只需在應用程序的Composition Root中配置它。 – Steven

+1

@mastha:聲明倉庫的位置並不重要。簡單存儲庫包裝上下文,上下文包裝與數據庫的連接。如果您想進行復雜的查詢,查詢的所有部分必須在同一個連接上運行。如果他們不是你的體系結構是錯誤的,你必須返回到白板並以另一種方式設計你的應用程序來支持每個請求上下文實例化,並將依賴注入上下文到創建的存儲庫實例中。 –

相關問題