实体框架 6.0,身份,一对多关系在 IdentityUser 类中不起作用

问题描述 投票:0回答:1

我对与身份和实体框架相关的问题感到疯狂。我正在使用代码优先方法。

我有这些课程:

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
收藏中(因此它们没有被回读)。

当我将元素添加到集合中时,它们被写入数据库但是当我稍后尝试在另一个控制器操作中读取收藏夹时,我总是得到一个空集合。

有人知道出了什么问题吗?

我在其他论坛尝试了不同的解决方案,但没有任何效果

.net entity-framework asp.net-core asp.net-identity
1个回答
0
投票

需要使用

.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
集合。

© www.soinside.com 2019 - 2024. All rights reserved.