我正在尝试使用可空引用类型和Entity Framework Core。该方法应异步返回可空的User
,但编译器报错。
CS8619
Nullability of reference types in value doesn’t match target type.
源代码如下:
public class UserRepository : IUserRepository
{
private readonly ApplicationDbContext DbContext;
public UserRepository(ApplicationDbContext dbContext)
{
DbContext = dbContext;
}
public Task<User?> GetByEmailAddress(string emailAddress) =>
DbContext.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailAddress);
}
如何正确编写此代码?
更新,我预计开启可空选项会改变 SingleOrDefaultAsync
的含义,使其实际上意味着 Task<{非空用户}>
所以如果我将方法设为异步的(如下面的代码),那么 C# 编译器将从 Task<>
中取出 User
并将其转换为 User?
public async Task<User?> GetByEmailAddress(string emailAddress) =>
await DbContext.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailAddress);
有没有其他方法可以不必将我的方法设为 async
就能实现这个功能?
User?
?) - Caius JardIUserRepository
承诺的是Task<User>
而不是Task<User?>
? - Marc Gravell