Я пытаюсь преобразовать пример Blazor в ASP. Net Страница Core Razor для целей обучения, но я получаю кучу ошибок на странице Employees.cs html и Employees.cs html .cs, где я я пытаюсь вызвать данные.
Я просто пытаюсь показать данные на этой странице, я не уверен, как и где определить данные вызова функций. Я не использую WebAPI.
Я также пытаюсь найти простой пример CRUD, связанный с asp. net core 3.1, чтобы я знал, как работает поток позже, я могу конвертировать то же самое, используя dapper et c ..
У меня нет опыта работы с MVC или Core
ОБНОВЛЕНИЕ: У меня было несколько ошибок, которые были решены, но единственная ошибка, которую я получаю при запуске, находится в programe.cs
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
сообщение об ошибке
InvalidOperationException: ошибка при проверке дескриптора службы 'ServiceType: RazorCore31.Data.IEmployeeService Время жизни: ограниченная реализацияType: RazorCore31.Data.EmployeeService': невозможно разрешить служба для типа 'RazorCore31.Data.SqlDbContext' при попытке активировать 'RazorCore31.Data.EmployeeService'.
System.AggregateException: 'Некоторые службы не могут быть созданы (ошибка при проверке дескриптора службы' ServiceType : RazorCore31.Data.IEmployeeService Время жизни: тип реализации с ограничением: RazorCore31.Data.EmployeeService ': невозможно разрешить службу для типа 'RazorCore31.Data.SqlDbContext' при попытке активировать 'RazorCore31.Data.EmployeeService'.) '
EmployeeService.cs
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using RazorCore31.Models;
namespace RazorCore31.Data
{
public class EmployeeService: IEmployeeService
{
private readonly SqlDbContext _dbContext;
public EmployeeService(SqlDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<List<Employee>> GetEmployees()
{
return await _dbContext.Employees.ToListAsync();
}
public async Task<bool> CreateEmployee(Employee employee)
{
employee.Id = Guid.NewGuid().ToString();
_dbContext.Add(employee);
try
{
await _dbContext.SaveChangesAsync();
return true;
}
catch (DbUpdateException)
{
return false;
}
}
public async Task<Employee> SingleEmployee(string id)
{
return await _dbContext.Employees.FindAsync(id);
}
public async Task<bool> EditEmployee(string id, Employee employee)
{
if (id != employee.Id)
{
return false;
}
_dbContext.Entry(employee).State = EntityState.Modified;
await _dbContext.SaveChangesAsync();
return true;
}
public async Task<bool> DeleteEmployee(string id)
{
var patient = await _dbContext.Employees.FindAsync(id);
if (patient == null)
{
return false;
}
_dbContext.Employees.Remove(patient);
await _dbContext.SaveChangesAsync();
return true;
}
Task<List<Employee>> IEmployeeService.GetEmployees()
{
throw new NotImplementedException();
}
}
}
IEmployeeService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using RazorCore31.Models;
namespace RazorCore31.Data
{
public interface IEmployeeService
{
Task<List<Employee>> GetEmployees();
Task<bool> CreateEmployee(Employee employee);
Task<bool> EditEmployee(string id, Employee employee);
Task<Employee> SingleEmployee(string id);
Task<bool> DeleteEmployee(string id);
}
}
Employee.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using RazorCore31.Data;
namespace RazorCore31.Models
{
public class Employee
{
[MaxLength(50)]
public string Id { get; set; }
[Required(ErrorMessage = "Name is RRRequired")]
[StringLength(20, ErrorMessage = "Name is too long.")]
public string Name { get; set; }
[Required]
[StringLength(20)]
public string Department { get; set; }
[MaxLength(100)]
public string Designation { get; set; }
[MaxLength(100)]
public string Company { get; set; }
[MaxLength(100)]
public string City { get; set; }
}
}
Employees.cs html
@page
@model RazorCore31.EmployeesModel
@using RazorCore31.Data
@using RazorCore31.Models
@using System.Collections.Generic
@{
ViewData["Title"] = "Employees";
}
<h1>Employees list</h1>
<p>List of Employee</p>
@if (employees == null)
{
<p>Loading page...</p>
}
else
{
<table class='table'>
<thead>
<tr>
<th>EmpName"</th>
<th>L["EmpDepartment"]</th>
<th>L["EmpDesignation"]</th>
<th>L["EmpCompany"]</th>
<th>L["EmpCity"]</th>
</tr>
</thead>
<tbody>
@foreach (var employee in employees)
{
<tr>
<td>@employee.Name</td>
<td>@employee.Department</td>
<td>@employee.Designation</td>
<td>@employee.Company</td>
<td>@employee.City</td>
<td>
<a href='/editemployee/@employee.Id'>Edit</a>
<a href='/deleteemployee/@employee.Id'>Delete</a>
</td>
</tr>
}
</tbody>
</table>
}
Employees.cs html .cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorCore31.Models;
using RazorCore31.Data;
namespace RazorCore31
{
public class EmployeesModel : PageModel
{
//public List<Employee> employees ;
private List<Employee> _empList;
public void empRepository()
{
//_empList = Data.EmployeeService.
}
public void OnGet()
{
}
public Task getEmployeesAsync()
{
_empList = EmployeeService.GetEmployees();
// return _empList;
}
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddScoped<IEmployeeService, EmployeeService>();
///services.AddSingleton<IEmployeeService, EmployeeService>();
}
ОШИБКА в Program.cs
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
InvalidOperationException: ошибка при проверке дескриптора службы 'ServiceType: RazorCore31.Data.IEmployeeService Время жизни: объем реализации Тип: RazorCore31.Data.EmployeeService': невозможно разрешить службу для типа 'RazorCore31.Data.SqlDbContext' при попытке активировать 'RazorCore31.Data.EmployeeService'.
System.AggregateException: 'Некоторые службы не могут быть построены (ошибка при проверке дескриптора службы) 'ServiceType: RazorCore31.Data.IEmployeeService Срок службы: Sc oped OperationType: RazorCore31.Data.EmployeeService ': невозможно разрешить службу для типа' RazorCore31.Data.SqlDbContext 'при попытке активировать' RazorCore31.Data.EmployeeService '.)'
ОШИБКА СООБЩЕНИЯ (Эта ошибка устраняется на основе решения @TanvirArjel
)