gpt4 book ai didi

c# - 如何使用 UserManager 在 IdentityUser 上加载导航属性

转载 作者:IT王子 更新时间:2023-10-29 04:30:38 26 4
gpt4 key购买 nike

我已扩展 IdentityUser 以包含用户地址的导航属性,但是当使用 UserManager.FindByEmailAsync 获取用户时,导航属性未填充。 ASP.NET Identity Core 是否有一些方法来填充导航属性,例如 Entity Framework 的 Include(),还是我必须手动完成?

我已经像这样设置了导航属性:

public class MyUser : IdentityUser
{
public int? AddressId { get; set; }

[ForeignKey(nameof(AddressId))]
public virtual Address Address { get; set; }
}

public class Address
{
[Key]
public int Id { get; set; }
public string Street { get; set; }
public string Town { get; set; }
public string Country { get; set; }
}

最佳答案

不幸的是,您必须手动执行或创建自己的 IUserStore<IdentityUser>FindByEmailAsync 中加载相关数据的位置方法:

public class MyStore : IUserStore<IdentityUser>, // the rest of the interfaces
{
// ... implement the dozens of methods
public async Task<IdentityUser> FindByEmailAsync(string normalizedEmail, CancellationToken token)
{
return await context.Users
.Include(x => x.Address)
.SingleAsync(x => x.Email == normalizedEmail);
}
}

当然,仅仅为此实现整个商店并不是最佳选择。

不过,您也可以直接查询商店:

UserManager<IdentityUser> userManager; // DI injected

var user = await userManager.Users
.Include(x => x.Address)
.SingleAsync(x => x.NormalizedEmail == email);

关于c# - 如何使用 UserManager 在 IdentityUser 上加载导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48623533/

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