簡體   English   中英

實體框架忽略不包含的外鍵

[英]Entity Framework ignore not included foreign keys

在我的 .net 6.0 項目中,我使用 Entity Framework 6 從我的數據庫中獲取數據。

我的model里面有一個外鍵,用來解析id的數據。

我使用以下調用來解析外鍵:

// ...
_context.Tools.Include(t => t.User).ToListAsync();
// ...

我的工具 Model 如下所示:

[Table("MY_TOOLS")]
public class Tool
{
    [Key]
    [Column("ID")]
    public int Id { get; set; }
    
    [Column("UPDATED_BY")]
    public int? UpdatedBy { get; set; }

    [ForeignKey("UpdatedBy")]
    public User? User { get; set; }
}

我的用戶 class 如下所示:

[Table("MY_USERS")]
public class User
{
    [Key]
    [Column("ID")]
    public int Id { get; set; }
    [Column("EMAIL")]
    public string? Email { get; set; }
}

當我像上面描述的那樣離開包含時,用戶被正確解析。

當我沒有明確告訴 Model 解析外鍵時,有沒有辦法從加載的數據中刪除用戶屬性?

它不應該默認解析它,因為它使用延遲加載。 您必須專門為用戶 object 查詢它才能獲取它,例如 _context.My_Tools.include(uvar = uvar.User).FirstOrDefault();

因此,您只需制作一個名為 getToolEager() 的方法和一個名為 getTool() 的方法,這將是對查詢用戶 object 的調用的“浪費”,只是將其丟棄以防萬一您可能不需要它。

您有 2 個選擇:

延遲加載代理

按照此處所述使用延遲加載: https://learn.microsoft.com/en-us/ef/core/querying/related-data/lazy

將數據加載為_context.Tools.ToListAsync(); 當您嘗試訪問它們時,用戶將加載。

手動加載相關數據

修改Tool以顯式存儲用戶 FK:

[Table("MY_TOOLS")]
public class Tool
{
    [Key]
    [Column("ID")]
    public int Id { get; set; }
    
    [Column("UPDATED_BY")]
    public int? UpdatedBy { get; set; }

    [ForeignKey("UpdatedBy")]
    public User? User { get; set; }
 
    public int? UpdatedBy{ get; set; }
}

因此,當您將數據加載為_context.Tools.ToListAsync(); 字段User將是 null 但UpdatedBy將具有用戶 ID(如果 FK 在數據庫中不是 null),因此您可以像tool.User = await _context.Users.FirstOrDefaultAsync(t => t.Id == tool.UpdatedBy);

暫無
暫無

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

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