[英]How to force outer join with .Include query Entity Framework 6
我的數據模型如下。 UserPhone
是必需的,但只要User
表可以為空,導航屬性是可選的:
public class Request
{
[Key]
public int Id {get;set;}
[Required]
public string UserPhone {get;set;}
[ForeignKey("UserPhone")]
public virtual User User {get;set;}
}
public class User
{
[Key]
public string UserPhone {get;set;}
}
在將請求輸入系統后填充User
表。 在輸入請求和用戶未填充之間的某處我試圖獲取用戶的所有請求(如果存在)(外部聯接)。
db.Requests.Include(r=>r.User).FirstOrDefault();
這給了我零結果,因為EF做了內連接(我的UserPhone
字段已定義,外鍵和Requests表需要它)。
如何正確定義映射以便能夠使用包含映射? 我需要include
因為我的案例觸及了幾個我希望用手動連接完成的表
它執行INNER JOIN
因為您已將FK屬性配置為[ Required
]。 因此從EF的角度來看,相關的User
記錄應該始終存在。
如果不是這種情況,則表示您的模型和數據庫不同步。 從Request.UserPhone
屬性中刪除[ Required
]注釋,您就完成了。
更新: EF嚴重依賴於通過約定,數據注釋和流暢配置提供的模型元數據。 所有決定都是基於該信息做出的。 例如,當您根據需要配置持久性原始屬性時,將刪除查詢中針對該屬性的所有null
檢查,並在查詢轉換時將其解析為常量true
或false
。 這同樣適用於人際關系。 在內部查詢(和Include
是一個特定的查詢結構)中,EF使用它們來確定連接的基數和連接的類型 。 當查詢的關系的所述一側,所述Required
/ Optional
的FK的屬性控制是否INNER
或LEFT OUTER
聯接被生成。
因此,控制EF行為的唯一方法是向實體模型提供正確的元數據。 無法動態控制/更改特定操作的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.