.net core 2实体框架 - 不在get上填充的ApplicationUser扩展外键对象

时间:2018-05-14 14:33:57

标签: c# .net-core entity-framework-core asp.net-core-identity .net-core-2.0

我已将ApplicationUser扩展为包含一个OrganizationId和一个应该映射到外部Organization表的Organization对象。这在初始用户注册时工作正常 - 如果它是现有组织,我只填充OrganizationId字段。如果它是一个新的组织,我实例化一个新的组织对象,并在组织表中创建一个新的组织。

当我使用GetUserAsync拉下记录时,会拉出正确的CityId和OrganizationId字段。但UserCity和Organization对象为NULL。我知道我可以根据返回的ID进行手动查找以查询城市/组织,但我想知道实体框架是否有一种机制可以在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; }
}

1 个答案:

答案 0 :(得分:1)

在获取记录时,您需要使用include关键字来获取引用的值。实施例

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
    .Include(blog => blog.Posts)
    .ToList();
}

对于您的代码将类似

context.Include("Organization").Include("City")

它也没有自动加载到实体框架核心,因为在版本2.1之前不支持延迟加载。

有关详细信息,请查看https://docs.microsoft.com/en-us/ef/core/querying/related-data