В настоящее время я борюсь за создание своего первого проекта Blazor, который должен быть небольшим приложением CRUD. Я пытался следовать некоторым учебным пособиям, но большинство из них являются устаревшими предварительными учебными пособиями, и есть много различий, которые смущают меня.
Моя проблема в том, что я еще не понимаю некоторые основные понятия (особенно «услуги»). Когда я запускаю приложение, я получаю следующую ошибку:
System.NullReferenceException: 'Ссылка на объект не установлена для экземпляра объекта.'
Временный локальный тип 'UserManagement.Models.Users []> был нулевым.
Ошибка возникает в строке "@foreach (var user in users)" в Index.razor. Я бы понял, что не было никаких данных. Тем не менее, есть данные в моей таблице пользователей. Так что я действительно не знаю, что ошибка может быть здесь.
То, что мы имеем до сих пор:
Index.razor
@page "/"
@using Models
@using Data
@inject UserService us
<form method="post">
<input asp-page="/Create" type="button" value="Neuen Benutzer erstellen" />
</form>
<form method="post">
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>UserID</th>
<th>Name</th>
<th>Supervisor</th>
<th>Ersteller</th>
<th>Erstelldatum</th>
<th>Optionen</th>
</tr>
</thead>
<tbody>
@foreach (var user in users)
{
<tr>
<td>@user.PkId</td>
<td>@user.UserId</td>
<td>@user.FirstName @user.LastName</td>
<td>@user.Supervisor</td>
<td>@user.CreationUser</td>
<td>@user.CreationDate</td>
<td>
<a>Delete Account</a><br />
<a asp-page="/Edit"> Edit Account</a>
</td>
</tr>
}
</tbody>
</table>
</form>
@code {
Users[] users;
protected override async Task OnInitializedAsync()
{
users = await us.GetUsersAsync();
}
}
}
UserService.cs
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Threading.Tasks;
using UserManagement.Models;
namespace UserManagement.Data
{
public class UserService
{
private static UserManagementContext _context;
public UserService (UserManagementContext context)
{
_context = context;
}
public async Task<Users[]> GetUsersAsync()
{
Users[] u;
u = await _context.Users.ToArrayAsync();
return u;
}
}
}
Модель: Users.cs
using System;
using System.Collections.Generic;
namespace UserManagement.Models
{
public partial class Users
{
public int PkId { get; set; }
public int FkJobtitle { get; set; }
public int FkCostcenter { get; set; }
public int? FkLocation { get; set; }
public int? FkDepartment { get; set; }
public int? FkWorkplace { get; set; }
public int? FkLanguage { get; set; }
public string UserId { get; set; }
public string Salutation { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PersonalId { get; set; }
public string Supervisor { get; set; }
public string Telephone { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime CreationDate { get; set; }
public string CreationUser { get; set; }
public DateTime? ModificationDate { get; set; }
public string ModificationUser { get; set; }
public virtual CostCenter FkCostcenterNavigation { get; set; }
public virtual Department FkDepartmentNavigation { get; set; }
public virtual Jobtitle FkJobtitleNavigation { get; set; }
public virtual Language FkLanguageNavigation { get; set; }
public virtual Location FkLocationNavigation { get; set; }
}
}
И, конечно, леса DbContext (отрывок):
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace UserManagement.Models
{
public partial class UserManagementContext : DbContext
{
public UserManagementContext()
{
}
public UserManagementContext(DbContextOptions<UserManagementContext> options)
: base(options)
{
}
public virtual DbSet<Approver> Approver { get; set; }
public virtual DbSet<Branche> Branche { get; set; }
public virtual DbSet<CostCenter> CostCenter { get; set; }
public virtual DbSet<DealerCompany> DealerCompany { get; set; }
public virtual DbSet<Department> Department { get; set; }
public virtual DbSet<Jobtitle> Jobtitle { get; set; }
public virtual DbSet<Language> Language { get; set; }
public virtual DbSet<Location> Location { get; set; }
public virtual DbSet<Request> Request { get; set; }
public virtual DbSet<RequestTypes> RequestTypes { get; set; }
public virtual DbSet<SystemRole> SystemRole { get; set; }
public virtual DbSet<SystemType> SystemType { get; set; }
public virtual DbSet<Systems> Systems { get; set; }
public virtual DbSet<Users> Users { get; set; }
public virtual DbSet<Workplace> Workplace { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
.....
При запуске мне пришлось загрузить UserService с помощью services.AddTransient вместо AddSingleton, поскольку при последнем из них возникала следующая ошибка:
System.AggregateException: «Некоторые службы не могут бытьпостроенный (Ошибка при проверке дескриптора службы 'ServiceType: UserManagement.Data.UserService Lifetime: Singleton PracticeType: UserManagement.Data.UserService': невозможно разрешить службу для типа 'UserManagement.Models.UserManagementContext' при попытке активировать 'UserManagement.Data. UserService '.)'