Я занимаюсь разработкой веб-приложения Blazor. Есть некоторые данные, которые взяты из базы данных. Они отображаются на веб-странице. Мне нужно убедиться, что при обновлении данных в базе данных эти данные обновляются на странице, без перезагрузки самой страницы пользователем. Я слышал, что это можно сделать с помощью SignalR. Можете ли вы сказать мне, как я могу это реализовать? Спасибо.
Чтение данных из базы данных:
public class UnitService
{
private readonly HmidbContext _context;
public UnitService(HmidbContext context)
{
_context = context;
}
//get units
public Task<List<Unit>>
GetUnitAsync(string strCurrentUser)
{
List<Unit> colUnits = new List<Unit>();
colUnits =
(from unit in _context.Units
select unit).ToList();
return Task.FromResult(colUnits);
}
}
И страница бритвы:
@page "/fetchdata"
@using HMI.Data
@inject AuthenticationStateProvider AuthenticationStateProvider
@*
*@
@inherits OwningComponentBase<UnitService>
<h1>Units</h1>
<AuthorizeView>
<!-- Show this section if the user is logged in -->
<Authorized>
@if (units == null)
{
<!-- Show this if the current user has no data... yet... -->
<p><em>Loading...</em></p>
}
else
{
<!-- Show the units for the current user -->
<table class="table">
<thead>
<tr>
<th>Unit</th>
<th>Status</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var unit in units)
{
<tr>
<td>@unit.Name</td>
<td>@unit.Status</td>
</tr>
}
</tbody>
</table>
}
</Authorized>
<!-- Show this section if the user is not logged in -->
<NotAuthorized>
<p>You're not signed in.</p>
</NotAuthorized>
</AuthorizeView>
@code {
// AuthenticationState is available as a CascadingParameter
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
List<Unit> units;
protected override async Task OnInitializedAsync()
{
// Get the current user
var user = (await authenticationStateTask).User;
units = await @Service.GetUnitAsync(user.Identity.Name);
}
}