首页 > 解决方案 > Entity Framework Core:创建视图模型时如何加载数据?

问题描述

我有一个 Blazor 组件(尽管就我的问题而言,它也可能是一个 Razor 页面、WPF 视图等),它允许用户创建一个新实体。

该组件注入一个视图模型,该模型公开了该组件绑定到表单控件的属性。当用户单击组件上的按钮时,它会调用视图模型上的一个方法,将实体保存到数据库中。

这一切都很好。

我遇到的问题是我需要添加一个属性,该属性的值将从集合中选择,使用下拉列表(想想 HTML<select>或 Blazor 的InputSelect)。我需要从数据库加载集合,以便组件上的下拉列表可以显示值,并允许用户选择一个。

但是,由于 EF 都是异步的,我无法在视图模型构造函数中加载数据。

我确实通过添加一个视图模型方法来加载数据并从组件的OnInitializedAsync()方法中调用它来解决它......

protected override async Task OnInitializedAsync() =>
  await ViewModel.LoadData();

...但让我想知道我是否只是做错了。有没有办法让视图模型自己加载数据?

谢谢你提供的所有帮助。

标签: c#entity-framework-core

解决方案


但是,由于 EF 都是异步的,我无法在视图模型构造函数中加载数据。

实际上,您可以使用该Task.Wait()方法,例如-

public MyViewModel()
{
     this.SomeList = SomeDataLoadingMethodSomewhereAsync().Wait();
}

我想你应该已经明白了。您正在调用一个异步方法,并等待它直到它返回。


推荐阅读