簡體   English   中英

實體框架使用外鍵填充子對象

[英]Entity Framework Populating Child Objects using Foreign Key

我希望這不是我一直在尋找的重復,但我更多地研究了這背后的原因。

我已經設置了一個用戶對象。

public class User
{
    public User()
    {

    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserID { get; set; }
    public Guid UserGuid { get; set; }
    public string Email { get; set; }
    public string Name { get; set; }
    public int CompanyID { get; set; }
    public int StatusID { get; set; }
    [ForeignKey("StatusID")]
    public Status Status { get; set; }
    public int RoleID { get; set; }
    [ForeignKey("RoleID")]
    public UserRole UserRole { get; set; }
}

和子對象

public class UserRole
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int RoleId { get; set; }
    public string Role { get; set; }
}

public class Status
{
    [Key]
    public int StatusId { get; set; }
    public string Description { get; set; }
}

當我打電話

var testuser = dbContext.User.Where(u => u.CompanyID == 1).FirstOrDefault();

我得到 users.Status 為空,但 users.StatusID = 1。

但是,如果我打電話

var status = dbContext.Status.ToList();
var role = dbContext.UserRole.ToList();
var testuser = dbContext.User.Where(u => u.CompanyID == 1).FirstOrDefault();

然后調用 testuser.Status,我可以看到與 1 的 StatusId 相關的正確對象。

有人可以解釋為什么這可以解決問題以及我如何使其工作而無需事先調用以下內容。

var status = dbContext.Status.ToList();

謝謝

您可以嘗試如下所示。

注意:Include()使用Eager loading

Eager loading 是一種過程,其中對一種類型的實體的查詢也加載相關實體作為查詢的一部分

using System.Data.Entity;

var testuser = dbContext.User.Where(u => u.CompanyID == 1)
                              .Include(p => p.Status)        
                              .FirstOrDefault();

就這樣使用你的財產。 關鍵字virtual將其屬性設置為延遲加載,然后您就可以訪問整個對象。

public virtual Status Status { get; set; }

順便說一句,我編輯了你的課程。 有一些不需要的東西,因為您可以通過屬性Status (如int statID = Status.StatusID; )訪問StatusID ,並且與 UserRole 相同。

public class User
{
    public User()
   {

   }

   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int UserID { get; set; }
   public Guid UserGuid { get; set; }
   public string Email { get; set; }
   public string Name { get; set; }
   public int CompanyID { get; set; }
   public virtual Status Status { get; set; }
   public virtual UserRole UserRole { get; set; }
   }
}

暫無
暫無

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

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