在EF 4中,我可以通過在DbContext.Database.SqlQuery
或DbContext.Set<T>().SqlQuery
上編寫sql來加載導航屬性嗎?我似乎沒有得到我的導航屬性填充。急於在EntityFramework中用DbContext.Database.SqlQuery加載
編輯
看來我可以做DbContext.Set()。SqlQuery類eagerloading,只是沒有DbContext.Database.SqlQuery。任何想法爲什麼?
在EF 4中,我可以通過在DbContext.Database.SqlQuery
或DbContext.Set<T>().SqlQuery
上編寫sql來加載導航屬性嗎?我似乎沒有得到我的導航屬性填充。急於在EntityFramework中用DbContext.Database.SqlQuery加載
編輯
看來我可以做DbContext.Set()。SqlQuery類eagerloading,只是沒有DbContext.Database.SqlQuery。任何想法爲什麼?
DbSet.SqlQuery的工作方式與Database.SqlQuery不同。 DbSet上的方法適用於給定的實體集。它必須返回給定類型的實體,並且默認情況下將跟蹤返回的實體。 Database.SqlQuery可以返回任何對象(可能不是實體),並且返回的對象不會被上下文跟蹤。您可能還需要看看MSDN比較這兩種方法:
Database.SqlQuery - http://msdn.microsoft.com/en-us/library/gg679117(v=vs.103).aspx
DbSet.SqlQuery - http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=VS.103).aspx
感謝您的回覆。我已經瞭解跟蹤部分。我想知道爲什麼我的導航屬性不會被填充。當我加入具有1-M關係的表(原始sql)時,我希望我的導航屬性被預先加載。它與DbContext.Set
你可以在彈出導航屬性的地方顯示代碼嗎?這兩個方法最終調用ObjectContext.ExecuteStoreQuery,我不認爲它填充導航屬性(至少它沒有當我嘗試)。 – Pawel 2012-02-04 20:46:12
請查看https://gist.github.com/0xorial/6363788 – ironic 2013-08-28 08:57:56
DbContext.Set()類SqlQuery不做預先加載;它延遲加載。你可以看到這一點,如果你輸出的sql執行和步驟通過代碼,使用:db.Database.Log = message => {Debug.WriteLine(message); }; – 2015-10-13 20:35:46