有两种型号:
public class User : IEntity
{
public int Id { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public string PhoneNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Role { get; set; } = "user";
public List<RefreshToken> RefreshTokens { get; set; }
}
public class RefreshToken : IEntity
{
[Key]
public int Id { get; set; }
public string Token { get; set; }
public DateTimeOffset Expiration { get; set; }
[ForeignKey("UserId")]
public int UserId { get; set; }
public User User { get; set; }
}
即使导航属性在那里,FK 也在那里,当我尝试查看 _context.Users.RefreshTokens 时,那里什么也没有。我不明白,对吗?为什么然后为空?
更新:
显然请求中包含的内容不够多,所以我尝试添加它,但看起来很糟糕,您能建议如何修复它吗?或者最好不要这样做,放弃导航属性,只在令牌表中进行搜索Where(p => p.UserId == user.Id)?
var userTokens = _libraryContext.Users.Where(p => p.Login == username)
.Include(p => p.RefreshTokens);
var savedRefreshToken = userTokens.Select(p => p.RefreshTokens)
.Select(t => t.Where(p => p.Token == requestModel.OldRefreshToken)
.FirstOrDefault()
.FirstOrDefault()
.Token;
这两个FirstOrDefault()在这里是因为第一个之后它返回IEnumerable<RefreshToken>,第二个之后它直接返回RefreshToken。
在大多数情况下,引用您想要结束的实体是有意义的