gpt4 book ai didi

c# - Entity Framework 使用外键填充子对象

转载 作者:行者123 更新时间:2023-11-30 14:49:01 25 4
gpt4 key购买 nike

我希望这不是我一直在寻找的副本,但我更多地是在研究这背后的原因。

我已经设置了一个用户对象。

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,我可以看到与 StatusId 为 1 相关的正确对象。

谁能解释一下为什么这会解决问题,以及我如何在无需事先调用以下方法的情况下使其工作。

var status = dbContext.Status.ToList();

谢谢

最佳答案

您可以尝试如下所示。

注意:使用 Eager loading Include()

Eager loading is the process whereby a query for one type of entity also loads related entities as part of the query

using System.Data.Entity;

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

关于c# - Entity Framework 使用外键填充子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com