2012-08-29 100 views
0

得到相關的實體我使用EF4.3用的DbContext。實體框架 - 從列表<T>

我有存儲在cookie中的實體。

當用戶返回到站點時,我當前將Cookie值解析爲List,但實體「BookmarkedDeals」具有導航屬性「Deal」,並且我想使列表IQueryable成爲我可以簡單附加導航性能無論是渴望或延遲加載

已經有了一個名單,這是我最初嘗試;

List<BookmarkedDeals> bd = // populate it from cookie 

var query = bd.AsQueryable().Include("Deal"); 

然而,交易爲空。

有人知道這可以實現嗎?

+0

您要查詢使用新的DbSet數據庫:context.BookmarkedDeals.Include(「交易」) – billy

回答

0

你「從cookie來填充它」的代碼需要返回一個IQueryable<BookmarkedDeals>,而不是將其轉換爲一個列表。那麼,或者您需要直接將該呼叫添加到.Include("Deal")到該代碼。

對List對象或任何其他本身不具有與數據庫的實時連接的事物做AsQueryable()將無法​​工作。

編輯:我沒有完全閱讀你的問題。如果這些實體本身存儲在一個cookie中,它就不會起作用。我會將ID存儲在cookie中,並根據這些ID執行包含「Deal」的查詢。

+0

謝謝你的建議,我給它一展身手。 – dotnetnoob

+0

那就是我現在在的地方。爲了公平起見,BookmarkedDeals只包含一個ID和日期。他們既是cookie條目又是數據庫實體的原因是因爲匿名用戶可以獲得這些功能,但不受限制,成員駐留在數據庫中。 – dotnetnoob

0

你是不是很想你把列表到cookie之前裝載的導航屬性?如果沒有,你應該從那開始。

或者,如果你把它連接到一個上下文,你可以加載導航性能。

 var db = new YourContext(); 
     foreach (var deal in bd) 
     db.Entry(deal).Reference(b => b.Deal).Load(); 
+0

System.InvalidOperationException:由於'BookmarkedDeal'類型的實體在上下文中不存在,因此無法爲屬性'Deal'調用成員'Load'。要將實體添加到上下文,請調用DbSet 的Add或Attach方法。 – dotnetnoob