.net core 2 Entity Framework - ApplicationUser 扩展外键对象未在获取时填充
.net core 2 Entity Framework - ApplicationUser Extended Foreign Key object not populating on get
我扩展了 ApplicationUser 以包含一个 OrganizationId 和一个应该映射到外部组织的组织对象 table。这在初始用户注册时效果很好——如果它是一个现有的组织,我只填充 OrganizationId 字段。如果它是一个新组织,我将实例化一个新组织对象并在组织 table.
中创建一个新组织
当我使用 GetUserAsync 拉取记录时,拉取了正确的 CityId 和 OrganizationId 字段。 UserCity 和 Organization 对象虽然是 NULL。我知道我可以根据返回的 ID 进行手动查找以查询 City/Organization,但我想知道 Entity Framework 是否有一种机制可以在 GetUserAsync 上自动使用外键对应对象填充这两个对象。
var user = await _userManager.GetUserAsync(User);
public class ApplicationUser : IdentityUser
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int? CityId { get; set; }
[ForeignKey("CityId")]
public virtual City UserCity { get; set; }
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
public int? OrganizationId { get; set; }
public bool AddToConstantContact { get; set; }
}
获取记录时需要使用include关键字来获取引用的值。例如
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
}
你的代码会是这样的
context.Include("Organization").Include("City")
它在entity framework核心中也不会自动加载,因为直到2.1版本才支持延迟加载。
查看更多信息https://docs.microsoft.com/en-us/ef/core/querying/related-data
我扩展了 ApplicationUser 以包含一个 OrganizationId 和一个应该映射到外部组织的组织对象 table。这在初始用户注册时效果很好——如果它是一个现有的组织,我只填充 OrganizationId 字段。如果它是一个新组织,我将实例化一个新组织对象并在组织 table.
中创建一个新组织当我使用 GetUserAsync 拉取记录时,拉取了正确的 CityId 和 OrganizationId 字段。 UserCity 和 Organization 对象虽然是 NULL。我知道我可以根据返回的 ID 进行手动查找以查询 City/Organization,但我想知道 Entity Framework 是否有一种机制可以在 GetUserAsync 上自动使用外键对应对象填充这两个对象。
var user = await _userManager.GetUserAsync(User);
public class ApplicationUser : IdentityUser
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int? CityId { get; set; }
[ForeignKey("CityId")]
public virtual City UserCity { get; set; }
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
public int? OrganizationId { get; set; }
public bool AddToConstantContact { get; set; }
}
获取记录时需要使用include关键字来获取引用的值。例如
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
}
你的代码会是这样的
context.Include("Organization").Include("City")
它在entity framework核心中也不会自动加载,因为直到2.1版本才支持延迟加载。
查看更多信息https://docs.microsoft.com/en-us/ef/core/querying/related-data