Как отображать данные в реальном времени из базы данных в веб-приложении Blazor? - PullRequest
0 голосов
/ 21 октября 2019

Я занимаюсь разработкой веб-приложения 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);

        }
}
...