我在我的代碼中需要加載所有相關實體(都是 - > 1 FK和 - > N FK)的特定查詢,因爲上下文將在。EF代碼優先:包括不工作的可選關係
我做了一個通用的「查詢」方法,需要params Expression<Func<MyItem, object>>[] includes
,然後在內部鏈接它們。這部分工作正常。
查詢看起來像這樣:
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
爲不工作屬性(放置在SubChildNotWorking的配置)的映射:
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
在所有的包括,僅SubChildNotWorking
沒有按」實際上工作。當用調試器檢查返回的對象時,我會看到所有屬性上的代理。打開代理爲我提供了所有其他關係的正確數據,併爲SubChildNotWorking
屬性提供了「對象上下文已處理異常」。
我能夠發現的唯一區別是SubChildNotWorking
是一個可爲空的FK(在DB上有可空列和在dbcontext中有可選配置),而所有其他的都是使用WithRequired配置的不可空FK。
該數據庫也是一個遺留的數據庫,不是用Code First創建的,也沒有遵循它的約定,我只是在DbContext中做了映射。其他一切正常。
我想弄清楚,如果急於加載不能在可空的FK上工作,但我找不到任何有關該文件的文檔。
這是一個錯誤,還是打算的行爲?但最重要的是,我該如何解決這個問題?
謝謝。
如果你只包括沒有其他subchildren了'SubChildNotWorking'會發生什麼?那它有用嗎? – Slauma 2012-04-11 11:38:18
不是。也不起作用。 – 2012-04-11 11:53:20
您可以檢查SQL查看是否正確(使用'var sql = facade.Query(c => c.Childs.Select(x => x.SubChildNotWorking))。ToString();')並手動測試查詢SSMS是否返回預期的結果行。 –
Slauma
2012-04-11 12:05:24