GOOGLE ADS

четверг, 5 мая 2022 г.

AddDbContext не вызывает конструктор DbContext

Я пытаюсь создать WebAPI с ядром ASP.NET. Я создал Models и db Context, но Context не звонит из Program.cs. Хотя я добавляю его с помощью addDbContext. В другом проекте это работало, но не здесь.

Возможно, я не до конца понимаю, как работает DI и нужно сделать что-то еще/изменить в контексте или в параметрах/определении конструктора контекста

Программа.cs:

using FootballWebAPI.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
string? ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<FootballAPIContext>(options => options.UseSqlServer(ConnectionString));
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseEndpoints(endpoints =>endpoints.MapControllers());
app.UseAuthorization();
app.MapControllers();
app.Run();

И мой контекст:

using Microsoft.EntityFrameworkCore;
namespace FootballWebAPI.Models
{
public partial class FootballAPIContext:DbContext
{
public FootballAPIContext(DbContextOptions<FootballAPIContext> options)
: base(options)
{
Database.EnsureDeleted();
Database.EnsureCreated();
}
public DbSet<Match> Matches { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
{
if(!optionBuilder.IsConfigured)
optionBuilder.UseSqlServer("Server= DESKTOP-1GRC7IR\\SQLEXPRESS;Database=FootballAPI; Trusted_Connection=True;MultipleActiveResultSets=true;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Match>();
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
}

Решение проблемы

Вы должны использовать миграции ef. Прочтите, например, эту статью: https://www.entityframeworktutorial.net/efcore/entity-framework-core-migration.aspx


  1. запустить консоль nuget

  2. введите add-migration init для вашего проекта с помощью FootballAPIContext

  3. Убедитесь, что новый класс миграции создан.

  4. Запустите приложение -> БД должна быть создана

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...