[英]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.