.net Entity Framework 6.0,身份,一对多关系在IdentityUser类中不起作用

g52tjvyc  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(131)

我正在为一个与身份和实体框架有关的问题而抓狂。我正在使用代码优先的方法。
我有这些课程:

public class WebApplicationUser : IdentityUser
{
    public virtual ICollection<Favorite> Favorites { get; set; }
}

public class Favorite
{
    public int Id { get; set; }
    public string? ImageName { get; set; }

    public virtual WebApplicationUser WebApplicationUser { get; set; }
}

public class WebApplicationContext : IdentityDbContext<WebApplicationUser>
{
    public WebApplicationContext(DbContextOptions<WebApplicationContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

我想添加Favorites属性,如上面的代码所示。
当我使用代码添加一个新的Favorite时,它工作正常,并被传输到数据库。
我通过获取当前用户对象

var user = await _userManager.GetUserAsync(HttpContext.User);
user.Favorites.Add

问题是,由于某种原因,数据库中现有的收藏夹没有填充到我的user.Favorites集合中(因此它们没有被读回)。
当我向集合中添加元素时,它们被写入数据库,但是当我稍后在另一个控制器操作中尝试读取收藏夹时,我总是得到一个空集合。
有人知道出了什么问题吗?
我在其他论坛尝试了不同的解决方案,但都不起作用

vc9ivgsu

vc9ivgsu1#

您需要使用.Include(xx)来加载EF Core中的相关数据,因此在这里您可以用途:

var result  = await _userManager.Users.Include(x=>x.Favorites).Where(x=>x.Id== HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier)).FirstOrDefaultAsync();

以使用user.Favorites集合加载用户。

相关问题