c# - Entity Framework Core:创建视图模型时如何加载数据?
问题描述
我有一个 Blazor 组件(尽管就我的问题而言,它也可能是一个 Razor 页面、WPF 视图等),它允许用户创建一个新实体。
该组件注入一个视图模型,该模型公开了该组件绑定到表单控件的属性。当用户单击组件上的按钮时,它会调用视图模型上的一个方法,将实体保存到数据库中。
这一切都很好。
我遇到的问题是我需要添加一个属性,该属性的值将从集合中选择,使用下拉列表(想想 HTML<select>
或 Blazor 的InputSelect
)。我需要从数据库加载集合,以便组件上的下拉列表可以显示值,并允许用户选择一个。
但是,由于 EF 都是异步的,我无法在视图模型构造函数中加载数据。
我确实通过添加一个视图模型方法来加载数据并从组件的OnInitializedAsync()
方法中调用它来解决它......
protected override async Task OnInitializedAsync() =>
await ViewModel.LoadData();
...但让我想知道我是否只是做错了。有没有办法让视图模型自己加载数据?
谢谢你提供的所有帮助。
解决方案
但是,由于 EF 都是异步的,我无法在视图模型构造函数中加载数据。
实际上,您可以使用该Task.Wait()
方法,例如-
public MyViewModel()
{
this.SomeList = SomeDataLoadingMethodSomewhereAsync().Wait();
}
我想你应该已经明白了。您正在调用一个异步方法,并等待它直到它返回。
推荐阅读
- python - 我的代码似乎只让玩家 2 获胜。我不确定我需要改变什么
- python - Python http 服务器不符合 ATS 策略
- woocommerce - 如何将购买的产品添加或链接到客户
- c# - 将协程设置为在单击列表中的每个按钮时启动
- azure - azure adf webactivity rest api中的执行输出长度超过限制(目前约为1M)
- mongodb - 在 $project 管道期间创建唯一的 ObjectId
- python - 获取“字符串索引超出范围”错误
- c# - 想对过滤结果应用排序
- javascript - window.open 仅在我的主页上的参数列表中删除 =
- android - 活动等待转换然后启动计时器。最小 SDK 16