所以我有两个表:Recipe
和Step
。一个食谱包含多个步骤。
我有一个WPF应用程序,当我加载特定视图时,我想使用Entity Framework异步加载数据。所以我有这个功能
public async Task<List<recipe>> GetRecipeAsync()
{
using (var context = new RecipeSystem())
{
return await context.recipe.ToListAsync();
}
}
在我的类的构造函数中,我正在调用上面的函数:
Recipes = _recipeService.GetRecipeAsync().Result;
但由于某种原因,我得到一个ObjectDisposedException。
如果我在GetRecipeAsync()
中设置断点并检查context.recipe.ToListAsync()
具有什么值,那么它看起来很好。那里有步骤。
答案 0 :(得分:1)
在处理完上下文后,无法延迟加载相关的Step
对象。您可以尝试使用预先加载来预先加载相关实体:
public async Task<List<recipe>> GetRecipeAsync()
{
using (var context = new RecipeSystem())
{
return await context.recipe.Include(x => x.Steps).ToListAsync().ConfigureAwait(false);
}
}
另请注意,通过调用async
方法来禁用ConfigureAwait(false)
服务方法中的上下文捕获是一种很好的做法。这也可以帮助您避免死锁:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html。