2012-04-04 137 views
0

我有很多行是產品桌,當用戶搜索的網站,我做一個選擇從這個表,我也使用在選擇包括方法,我使用分析器,我注意到EF生成一個查詢與很多內部聯接,左聯接等緩存表與實體框架4

我想要做的是使用此選擇查詢,並將結果插入到同一數據庫中的臨時緩存表中,並那麼我可以創建一個服務來每隔x分鐘更新一次這張表。

的問題是,如何使EF使用此緩存表中選擇行,所以我可以只是做一個選擇*而不是每次查詢產品表中的聯接?

謝謝!

回答

1

我敢肯定EF沒有臨時表支持 - 至少開箱即用 - 但它是不斷變化的。

最好的辦法是做這樣的事情...

dbcontext.Database.ExecuteSqlCommand("...") 

...我猜那裏,你可以運行任意SQL(我知道大多數的東西可以被傳遞,但我我不確定這些限制,但你可以運行一個SP,創建索引等) - 設置一個臨時表。

那麼下一步會做相反的一側是這樣的..

dbcontext.MyTable.SqlQuery("...").ToList() 

...映射回SQL結果到你的一些實體 - 或者一個非映射實體字符串或其他。 (dbcontext.MyTable.SqlQuery<T>("...").ToList()

的問題是如何做到這一點正是 - 不知道你的具體情況真的。但你可以事先創建一個臨時表並將其映射 - 並將其用於臨時目的。

基本上,這是一個數據庫管理員的想法 - 但EF對於這些事情並不完美(請參閱類似此處的東西Recommed usage of temp table or table variable in Entity Framework 4. Update Performance Entity framework),但您可以使用上述自定義運行查詢。

希望它有助於

編輯:這也可能有助於from EF forums但它更涉及。

+0

感謝NSGaga!主要問題是關於其他列名......但我想我最終會自己創建一些映射......謝謝! – user1082693 2012-04-04 23:16:23

+0

增加了一個環節 - 放大Db的我已經一年以前,我不得不使用定製的ORM獲得我需要的東西 - 但如果你覺得這個回答一些EF是好得多了,更穩定,測試等 – NSGaga 2012-04-04 23:36:51

+0

/最您的問題,請考慮標記爲答案。對於其他人,或者如果需要,編輯問題以說明當前狀態,回答什麼和缺少什麼。謝謝 – NSGaga 2012-04-05 17:50:31