我已经延长了IdentityUser
包含用户地址的导航属性,但是当让用户使用UserManager.FindByEmailAsync
,导航属性未填充。 ASP.NET Identity Core 是否有某种方法来填充导航属性,例如实体框架的导航属性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
method:
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)