gpt4 book ai didi

c# - 如何替换 Entity Framework FirstOrDefaultAsync

转载 作者:行者123 更新时间:2023-11-30 19:40:55 35 4
gpt4 key购买 nike

当使用 ASP.NET 标识并将 UserStore 自定义为我自己的一组数据库表时,使用 entity framework 就像这样

public Task<MyUser> FindByNameAsync(string userName)
{
var context = new CompanyDbContext();

Task<MyUser> task = context.MyUsers.Where(u => u.UserName == userName)
.FirstOrDefaultAsync();

return task;
}

像这样调用它效果很好:

MyUser user = await userManager.FindAsync(context.UserName, context.Password);

现在,我想将其替换为硬编码的用户列表,如下所示:

public Task<MyUser> FindByNameAsync(string userName)
{
var myusers = new List<MyUser>
{
new MyUser() { Id="1", UserName = "tom", Password = "secret" },
new MyUser() { Id="2", UserName = "mary", Password = "supersecret" }
};

Task<MyUser> task = new Task<MyUser>(() => myusers.SingleOrDefault(
u => u.UserName == userName));

return task;
}

但这不起作用,因为它卡在这一行

MyUser user = await userManager.FindAsync(context.UserName, context.Password);

如有任何建议,我们将不胜感激。

最佳答案

您创建了 Task,但从未启动它,因此它永远不会运行,因此等待它意味着永远等待。

您可以在创建任务后添加对 Start 的调用,但创建要立即运行的任务时,更可取的选择是简单地使用 Task.Run(或 Task.Factory.StartNew,如果您使用的是 .NET 4.0)。

除此之外,您的代码甚至不需要在后台线程中运行。它将足够快地完成,您可以简单地同步执行它。您可以只使用 Task.FromResult 来计算结果并将其包装在一个已经完成的任务中。

关于c# - 如何替换 Entity Framework FirstOrDefaultAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560758/

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