2010-10-25 59 views
1

我有2個實體框架實體集具有多對多關係(受損的3個DB表)。爲了這個例子,假設我有一個工人實體和一個公司實體,每個工人可以在多個公司工作,每個公司可以有很多工人。優化多個LINQ to Entity框架查詢

我想爲每個員工檢索他/她工作的所有公司。直接的方法是爲每個工作人員創建一個查詢,以便使用關聯表和公司表之間的連接來獲取公司。但這會導致每個工作人員往返數據庫。

我相信這可以以更好的更優化的方式完成。任何幫助將不勝感激。

謝謝。

回答

1

如果你的加入表沒有任何額外的信息(只是工人和公司的Id),你應該只有兩個實體在你的模型中:WorkerCompany。如果EF 4實體圖形默認情況下急於加載,所以除非你能這樣做(context.ContextOptions.LazyLoadingEnabled = true;)惰性加載,你會得到你的公司名單,只要你對員工查詢:

var workers = context.Workers.ToList(); 
// Companies already loaded - do something with them 
var companiesForWorker0 = workers[0].Companies; // Don't forget to check 
...            // for null in real code 

您也可以直接告訴EF躍躍欲試工人查詢時(如果啓用了惰性加載,這將是必要的)加載公司:

var workers = context.Workers.Include("Companies").ToList(); 
+0

我意識到加入表是一個實體的事實也是一個錯誤。 – 2010-10-25 12:13:17

0

這是我在Linq2SQL中做的,可能適合你。

  1. 查詢#1。
  2. 收集列表中的所有工人'ids'。
  3. 使用此列表傳遞給輔助查詢(換句話說where list.Contains(item))。

現在應該只需要2個查詢。

如果需要,您可以將它們兩者合併爲一個查詢,並稍微付出一點努力。

+0

是的,這就是你有什麼L2S做,因爲它產生了加入表的實體。如果連接表包含額外的數據並且模型中會存在第三個實體,則只有在EF中才有必要。 – Yakimych 2010-10-25 08:58:15