簡體   English   中英

如何使用.Include查詢實體框架6強制外連接

[英]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檢查,並在查詢轉換時將其解析為常量truefalse 這同樣適用於人際關系。 在內部查詢(和Include是一個特定的查詢結構)中,EF使用它們來確定連接的基數和連接的類型 當查詢的關系的所述一側,所述Required / Optional的FK的屬性控制是否INNERLEFT OUTER聯接被生成。

因此,控制EF行為的唯一方法是向實體模型提供正確的元數據。 無法動態控制/更改特定操作的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM