我有2個實體框架實體集具有多對多關係(受損的3個DB表)。爲了這個例子,假設我有一個工人實體和一個公司實體,每個工人可以在多個公司工作,每個公司可以有很多工人。優化多個LINQ to Entity框架查詢
我想爲每個員工檢索他/她工作的所有公司。直接的方法是爲每個工作人員創建一個查詢,以便使用關聯表和公司表之間的連接來獲取公司。但這會導致每個工作人員往返數據庫。
我相信這可以以更好的更優化的方式完成。任何幫助將不勝感激。
謝謝。
我有2個實體框架實體集具有多對多關係(受損的3個DB表)。爲了這個例子,假設我有一個工人實體和一個公司實體,每個工人可以在多個公司工作,每個公司可以有很多工人。優化多個LINQ to Entity框架查詢
我想爲每個員工檢索他/她工作的所有公司。直接的方法是爲每個工作人員創建一個查詢,以便使用關聯表和公司表之間的連接來獲取公司。但這會導致每個工作人員往返數據庫。
我相信這可以以更好的更優化的方式完成。任何幫助將不勝感激。
謝謝。
如果你的加入表沒有任何額外的信息(只是工人和公司的Id),你應該只有兩個實體在你的模型中:Worker
和Company
。如果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();
這是我在Linq2SQL中做的,可能適合你。
where list.Contains(item)
)。現在應該只需要2個查詢。
如果需要,您可以將它們兩者合併爲一個查詢,並稍微付出一點努力。
是的,這就是你有什麼L2S做,因爲它產生了加入表的實體。如果連接表包含額外的數據並且模型中會存在第三個實體,則只有在EF中才有必要。 – Yakimych 2010-10-25 08:58:15
我意識到加入表是一個實體的事實也是一個錯誤。 – 2010-10-25 12:13:17