如何重复实体框架firstordordordefaultasync



使用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)。<<<<<<<<<<<</p>

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

尝试这个...

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" }
   };
   var task = Task.FromResult(myusers.SingleOrDefault(u => u.UserName == userName));
   return task;
}

相关内容

  • 没有找到相关文章

最新更新