Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF+;async=在创建模型时不能使用上下文?_C#_Wpf_Entity Framework - Fatal编程技术网

C# EF+;async=在创建模型时不能使用上下文?

C# EF+;async=在创建模型时不能使用上下文?,c#,wpf,entity-framework,C#,Wpf,Entity Framework,设置相当标准。使用SQL Server连接字符串创建了视图和存储库。将视图模型传递给存储库,并在视图模型的构造函数上调用存储库中的集合。在我尝试使用async/await组合异步执行之前,一切都很正常,但现在在调用存储库集合时出现错误“在创建模型时无法使用上下文” 旧工作代码: void FillPeopleList() { PeopleList = _repository.GetPeople(); } 新的坏代码: async void FillPeopleList() { awai

设置相当标准。使用SQL Server连接字符串创建了视图和存储库。将视图模型传递给存储库,并在视图模型的构造函数上调用存储库中的集合。在我尝试使用async/await组合异步执行之前,一切都很正常,但现在在调用存储库集合时出现错误“在创建模型时无法使用上下文”

旧工作代码:

void FillPeopleList()
{
  PeopleList = _repository.GetPeople();
}
新的坏代码:

async void FillPeopleList()
{
  await Task.Run(()=>
  {
    PeopleList = _repository.GetPeople(); // Error
  });
}
EF不是线程安全的


不能在多个线程上使用同一上下文。

@Manuel:Correct;这是在不同线程上运行的
Task.Run
。你认为它做什么?在任务中包装一个方法。如何使用wait运行void方法?(没有纺新的线)@Manuel:那没有任何意义。等待的全部意义就是等待某事完成。如果它在UI线程中运行,那么就没有什么可等待的了。异步运行东西不需要单独的线程。您可以使用回调来确保不阻塞线程。wait和async为您完成回调包装。在这种情况下,我说的是继续做一些事情,当存储库响应时,继续执行块(后面没有任何内容,但这无关紧要)。@Manuel:但是您希望
GetPeople()
在哪里/如何运行?