文脈傳承一個實體類型多個數據庫上下文?
// MobileContext has VisitPlan, Customer, etc. that all the following contexts need.
public MobileContext : DbContext { }
public AuthenticationEntities : MobileContext { }
public OrderEntities : MobileContext { }
public ThriftEntities : MobileContext { }
的上下文是代碼,第一,我不使用它們來創建數據庫。
說明
我創造出具有存儲庫VisitPlan
,UserBranch
,等所有的庫中的UserPermissionService
一個實例是在AuthenticationEntities
與Customer
和VisitPlan
是的MobileContext
這AuthenticationEntites
的一部分,其他情況從...繼承。
問題
當我嘗試執行聯接查詢UserBranch
和VisitPlan
它告訴我,我不能在兩個上下文之間的查詢,但如果我看在調試器在它們兩者的庫的DbContext
鍵入AuthenticationEntities
。
有沒有辦法做到這一點?
查詢
//
// USER-BRANCHES: Check the user branches table for permissions.
//
var branches = Branches
.GetAll()
.Where(x => x.AzureUser.Username == username && x.StartDate <= effective && x.EndDate >= effective);
//
// USER-ROUTES: Check the user routes table for permissions.
//
var routes = Routes
.GetAll()
.Where(x => x.AzureUser.Username == username && x.StartDate <= effective && x.EndDate >= effective);
//
// USER-DRIVERS: Check the user driver number table for permissions.
//
var drivers = DriverNumbers
.GetAll()
.Where(x => x.AzureUser.Username == username && x.StartDate <= effective && x.EndDate >= effective);
//
// VISIT PLANS: Retrieve a list of visit plans currently active.
//
var vpQuery = VisitPlans
.GetAll()
.Where(
x => x.FromDate <= effective && x.ToDate >= effective
&& (
branches.Any(b => b.Branch == x.Branch)
|| routes.Any(r => r.Route == x.Route)
|| drivers.Any(d => d.DriverNumber == x.DriverNumber)
)
);
//
// QUERY: Retrieve all the customers which have effective stop plans and are included in one of the above queries.
//
var customerQuery = vpQuery
.Join(
inner: Customers.GetAll(),
outerKeySelector: x => x.SAPCustomerID,
innerKeySelector: x => x.SAPCustomerID,
resultSelector: (vp, c) => c
);
其中:
VisitPlans
是Repository<VisitPlan>
類型其使用AuthenticationEntities
作爲其DbContext
Customers
的是類型的10,它使用AuthenticationEntities
作爲其DbContext
Branches
是Repository<UserBranch>
型其使用AuthenticationEntities
作爲其DbContext
Routes
的是Repository<UserRoute>
類型其使用AuthenticationEntities
作爲其DbContext
DriverNumbers
被Repository<UserDriverNumber>
類型其使用AuthenticationEntities
的作爲它的DbContext
請分享您的查詢碼。您應該有一個負責查詢的DbContext實例,以及從該查詢返回的所有實體。你不能連接不同的'DbContext'實例(*我也不知道你爲什麼想要*)。 – Igor
如果我添加查詢代碼,它將需要一堆其他代碼,頁面將長達一英里。查詢不是問題,問題是我在所有上下文中都有一些實體(即VisitPlan等),當我在一個特定上下文(例如UserBranch,UserRoute等)的實體和實體之間加入時,它抱怨兩個上下文,即使這些存儲庫正在使用「AuthenticationEntities」的實例。所以對我來說,似乎有一個與'VisitPlan'和其他實體在多個上下文的問題,這就是我所問。 – Shelby115
@ Shelby115這聽起來像你需要重新考慮你的設計。除非有特殊情況,例如擁有多個數據庫,否則您應該只有一個上下文。如果您正在使用存儲庫模式(實體框架不需要這種模式),則應該在需要時注入上下文。 – JNYRanger