2017-09-26 31 views
1

我有一個SQL語句,我想返回一個人有一個相關的部門實體的列表。 Person類有一個Department ID和一個實體框架的魔力,當我從數據庫中加載它時,它將正確的Department對象關聯起來。EF與SQL查詢加載相關的實體

我的SQL語句是:

SELECT * 
FROM PERSON 
    INNER JOIN DEPARTMENT ON PERSON.DEPARTMENT_ID = DEPARTMENT.ID 
WHERE UPPER(FORENAME) LIKE '%RALPH%' 
ORDER BY SURNAME 

在當我運行查詢MSSMS我得到如下結果:

enter image description here

然而,當我運行使用DbSet.SqlQuery的SQL( )我得到以下結果:

enter image description here

請注意部門對象在第一個項目中如何爲空,但已填充到第二個項目中。

我知道我沒有提供太多的信息,我希望這只是一個簡單的答案。

順便說..

LazyLoadingEnabled設置爲false,你可以看到,我知道改變這個真會解決這個問題。我寧願不啓用它,因爲我想要的任何一個呼叫都需要它。

謝謝你們

+1

爲什麼使用'SqlQuery'而不是正確的EF查詢? – DavidG

+0

我有一個人,我執行過濾器..使用由用戶提供的標準,我生成一個SQL語句的列表。搜索有很多潛在的變化,所以sql語句似乎是要走的路。 – Murphybro2

+0

這幾乎肯定不是要走的路,否則使用EF沒有意義。 – DavidG

回答

1

如果你先前已經加載了系成的DbContext實例,EF更改跟蹤將認識到,它已經與DepartmentID的= 2部,並設置導航屬性到該實例。