【发布时间】:2021-11-03 12:01:30
【问题描述】:
我有一个计时器,每 10 秒计时一次。 计时器过去后,它将调用我的服务,然后获取数据 从我的服务中分配给我的 radzen 表,然后 StateHasChanged 将 重新渲染页面并更新更改。
@using System.Timers;
Timer _timer;
protected override async Task OnInitializedAsync()
{
StartTimer();
}
private void StartTimer()
{
_timer = new System.Timers.Timer();
_timer.Interval = 10000; //every 10 seconds
_timer.Elapsed += DashboardTimerElapsed;
_timer.Start();
}
private async void DashboardTimerElapsed(Object source, ElapsedEventArgs e)
{
await FetchData();
}
private async Task FetchData()
{
dashboardData = await getDataService.GetDataAsync();
await InvokeAsync(StateHasChanged);
}
计时器已过,一切正常,我遇到的唯一问题是,如果我的应用程序正在运行,我对数据库中的一个数据进行了更改,例如:将值名称“shazam”更改为“shazamm”。在过去,我的新数据应该拉下“shazamm”,但是当我查看 dashbardData 时,我可以看到它不是拉下“shazamm”,而是拉下“shazam”,我认为这是 dbcontext 的旧实例。 (顺便说一句,我的 dbcontext 是作用域)-
services.AddDbContext<DbContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("DbContextURL"));
}, ServiceLifetime.Scoped);
谁能看到我哪里出错并请帮助我?谢谢!
【问题讨论】:
-
为每个请求使用一个新的 DbContext。
-
@DavidBrowne-Microsoft 嗨,我将如何实现这一目标?
-
@DavidBrowne-Microsoft 难道我不能通过一个作用域的 dbcontext 来实现这一点吗?
-
仅当您对每个计时器执行都有单独的范围时。
标签: c# entity-framework timer