我們遇到了在實體之間導航的問題,其中之一基於視圖。 問題是,當我們去實體框架 - 視圖中的數據加載過多
TableEntity.ViewEntity.Where(x => x.Id == Id).FirstOrDefault())
在後臺被加載在其中不是我們想要的或希望的視圖中的所有記錄。
然而,當我們去
_objectContext.TableEntityView
.Where(x => x.TableObjectId == TableObjectId && x.Id == Id)
那麼它只是加載了一排是我們所使用的導航屬性期待
總之什麼原因導致大量的數據負載 - 它就像查詢早日實現。
我們將EF 4與SQL 2005數據庫結合使用。這些視圖用於提供彙總的信息,如果沒有大數據負載(具有諷刺意味的),EF無法輕鬆完成。我們手動構建了1:視圖之間的許多關聯。
爲什麼我們會在第一個實例中獲得大數據負載,而不是第二個?
非常感謝所有/任何幫助
感謝@Adam Rackis。但是,如果我去Table1.Table2.Where(x => x.Id == Id),它肯定不會加載表2中的所有內容。我的理解是,因爲它是IQueryable而不是IEnumerable,因此它將所有內容都一次性發送到服務器 - 當您意識到查詢(即使用ToList())時觸發。否則,導航屬性在EF中不可用。 –
是的,你是對的。導航屬性不是IQueryable。開箱即用的行爲對於大多數情況來說可能是最好的。如果你需要更細粒度的控制,也許NH對你來說會是一個更好的ORM? (這是來自巨大的EF粉絲,順便說一句) –
@Tim,也見我的編輯。這可能是使用DbContext的可能,但仍然不可能通過犁過對象導航屬性 –