ошибка при вставке данных в базу данных с помощью ef core, для этого DbContext не настроен поставщик базы данных - PullRequest
0 голосов
/ 23 мая 2019

Я вставляю данные в базу данных в ядре .net, если ядро ​​позволяет мне получать данные из API get, но в то время как я вставляю данные в базу данных, получаю ошибку.И это ошибка компиляции в Context.

Ошибка InvalidOperationException: для этого DbContext не настроен поставщик базы данных.Поставщик может быть настроен путем переопределения DbContext.При настройке метода или с помощью AddDbContext в поставщике услуг приложения.Если используется AddDbContext, то также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его базовому конструктору для DbContext.

Класс контекста

 public class Context : DbContext
    {
        public Context(DbContextOptions<Context> options) : base(options)
        {

        }
        public DbSet<Mplus> MpData { get; set; }

    }

APIController

namespace MplusApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MPlusController : ControllerBase
    {

        private Context _context;

        public MPlusController(Context context) {
            _context = context;
        }

        [HttpGet("{Ftemp}")]
        public IActionResult Get(int Ftemp) {

            using (var context = new Context())//Getting compilation error here
            {
                var mp = new Mplus()
                {
                    Ftemp = Ftemp,

                };
                context.MpData.Add(mp);
                context.SaveChanges();
            }
            return Ok();
        }

    }

Модель

 public class Mplus
    {

        public int Ftemp { get; set; }
    }

startup.cs

 public class Startup
    {

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }


        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<Context>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }

1 Ответ

2 голосов
/ 23 мая 2019

Вы должны указать EF, какой поставщик использовать (SQL Server, SQLite и т. Д.).У вас есть два варианта.Либо сделайте это при регистрации метода ConfigureServices класса запуска в DbContext, как в:

services.AddDbContext<Context>(options => options.UseSqlServer(@"connection string"));

, либо сделайте это в производном от DbContext классе в методе OnConfiguring:

protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
    builder.UseSqlServer(@"connection string");

}

См. https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext.

Кроме того, вам нужно использовать вводимый вами экземпляр Context, а не создавать новый объект Context - если вы это сделаете, вам нужно будет передать DbContextOptionsНапример, у вас нет открытого конструктора без параметров.

Примерно так:

var mp = new Mplus()
{
    Ftemp = Ftemp,
};
_context.MpData.Add(mp);
_context.SaveChanges();
...