Триггер класса встроенного контроллера invalidoperationexception - PullRequest
0 голосов
/ 05 мая 2020

Я пытался изучить часть веб-API. Итак, создал EF, а затем создал контроллер с использованием контекста БД. Вот контроллер. net, созданный для меня.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SanApi.Models;

namespace SanApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TblDepartmentsController : ControllerBase
{
    private readonly ClassooContext _context;

    public TblDepartmentsController(ClassooContext context)
    {
        _context = context;
    }

    // GET: api/TblDepartments
    [HttpGet]
    public async Task<ActionResult<IEnumerable<TblDepartmentMaster>>> GetTblDepartmentMaster()
    {
        return await _context.TblDepartmentMaster.ToListAsync();
    }

    // GET: api/TblDepartments/5
    [HttpGet("{id}")]
    public async Task<ActionResult<TblDepartmentMaster>> GetTblDepartmentMaster(int id)
    {
        var tblDepartmentMaster = await _context.TblDepartmentMaster.FindAsync(id);

        if (tblDepartmentMaster == null)
        {
            return NotFound();
        }

        return tblDepartmentMaster;
    }

    // PUT: api/TblDepartments/5
    // To protect from overposting attacks, enable the specific properties you want to bind to, for
    // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
    [HttpPut("{id}")]
    public async Task<IActionResult> PutTblDepartmentMaster(int id, TblDepartmentMaster tblDepartmentMaster)
    {
        if (id != tblDepartmentMaster.DepartmentId)
        {
            return BadRequest();
        }

        _context.Entry(tblDepartmentMaster).State = EntityState.Modified;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!TblDepartmentMasterExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return NoContent();
    }

    // POST: api/TblDepartments
    // To protect from overposting attacks, enable the specific properties you want to bind to, for
    // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
    [HttpPost]
    public async Task<ActionResult<TblDepartmentMaster>> PostTblDepartmentMaster(TblDepartmentMaster tblDepartmentMaster)
    {
        _context.TblDepartmentMaster.Add(tblDepartmentMaster);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetTblDepartmentMaster", new { id = tblDepartmentMaster.DepartmentId }, tblDepartmentMaster);
    }

    // DELETE: api/TblDepartments/5
    [HttpDelete("{id}")]
    public async Task<ActionResult<TblDepartmentMaster>> DeleteTblDepartmentMaster(int id)
    {
        var tblDepartmentMaster = await _context.TblDepartmentMaster.FindAsync(id);
        if (tblDepartmentMaster == null)
        {
            return NotFound();
        }

        _context.TblDepartmentMaster.Remove(tblDepartmentMaster);
        await _context.SaveChangesAsync();

        return tblDepartmentMaster;
    }

    private bool TblDepartmentMasterExists(int id)
    {
        return _context.TblDepartmentMaster.Any(e => e.DepartmentId == id);
    }
}
}

Но он вызывает ошибку:

nvalidOperationException: невозможно разрешить службу для типа 'SanApi.Models.ClassooContext 'при попытке активировать' SanApi.Controllers.TblDepartmentsController '.

Я понятия не имею, с момента его автоматического создания и где ошибка. Я новичок в веб-API. Так что застрял.

1 Ответ

1 голос
/ 06 мая 2020

После создания контекста базы данных, например:

public class ClassooContext : DbContext
{
    public ClassooContext(DbContextOptions<SchoolContext> options) : base(options)
    {
    }

    public DbSet<Course> Courses { get; set; }

}

, вам необходимо зарегистрировать ClassooContext. ASP. NET Ядро по умолчанию реализует внедрение зависимостей. Службы (например, контекст базы данных EF) регистрируются с помощью внедрения зависимостей во время запуска приложения. Чтобы зарегистрировать ClassooContext как службу, откройте Startup.cs и добавьте выделенные строки в метод ConfigureServices:

services.AddDbContext<ClassooContext>(options =>
 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

И откройте файл appsettings.jso n и добавьте строку подключения, например:

"ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ContosoUniversity1;Trusted_Connection=True;MultipleActiveResultSets=true"
},

Затем вы можете ввести в контроллер, чтобы использовать контекст EF, например:

private readonly ClassooContext _context;

public TblDepartmentsController(ClassooContext context)
{
    _context = context;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...