programing

ASP에서 DbContext를 확인할 수 없습니다.NET Core 2.0

i4 2023. 8. 29. 20:09
반응형

ASP에서 DbContext를 확인할 수 없습니다.NET Core 2.0

우선, 데이터베이스에 샘플 데이터를 시드하려고 합니다.(스타트업에서) 이렇게 하는 방법이라고 읽었습니다.구성)(ASP를 참조하십시오.NET Core RC2 시드 데이터베이스)

ASP를 사용하고 있습니다.기본 옵션이 포함된 NET Core 2.0.

평소처럼, 나는 나의DbContextConfigureServices하지만 그 이후로 스타트업에서.다음을 사용하여 해결하려고 할 때 방법 구성GetRequiredService다음과 같은 메시지가 표시됩니다.

System.잘못된 작동예외: '범위가 지정된 서비스의 SGDTP를 확인할 수 없습니다.사회 기반 시설.맥락.루트 공급자의 'SGDTPContext'입니다.

내 시작 클래스는 다음과 같습니다.

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<SGDTPContext>(options => options.UseInMemoryDatabase("MyDatabase"))
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();

        SeedDatabase(app);
    }

    private static void SeedDatabase(IApplicationBuilder app)
    {
        using (var context = app.ApplicationServices.GetRequiredService<SGDTPContext>())
        {
            // Seed the Database
            //... 
        }
    }
}

내가 뭘 잘못하고 있는 거지?또한 여기가 시드 데이터를 생성하기에 가장 좋은 장소입니까?

등록하는 중입니다.SGDTPContext범위 서비스로 사용한 다음 범위 밖에서 액세스를 시도합니다.내부에 범위를 만들려면SeedDatabase메소드는 다음을 사용합니다.

using (var serviceScope = app.ApplicationServices.CreateScope())
{
    var context = serviceScope.ServiceProvider.GetService<SGDTPContext>();

    // Seed the database.
}

@khellang이 지적한 것에 대한 공로.CreateScopeEF Core 2에서 시드를 구현하는 방법에 대한 @Tseng의 의견 및 답변에 대한 확장 방법.

공식 ASP를 팔로우하는 동안 이 오류가 발생했습니다.응용 프로그램에 시드 데이터를 추가해야 하는 섹션에서 NetMVC Core 자습서.긴 이야기 짧게, 이 두 줄을 추가합니다.

 using Microsoft.EntityFrameworkCore;
 using Microsoft.Extensions.DependencyInjection;

에게SeedData수업에서 해결해 주었습니다.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;

namespace MvcMovie.Models
{
public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(

           serviceProvider.GetRequiredService<DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
  ...

이유를 말씀드릴 수는 없지만, 이것들은 제가 따라하면서 얻은 두 가지 옵션이었습니다.Alt + Enter빠른 수정 옵션

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)
    {
        var key = Encoding.ASCII.GetBytes(Configuration.GetSection("AppSettings:Token").Value);
        services.AddDbContext<DataContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")).EnableSensitiveDataLogging());
        services.AddMvc();
        services.AddTransient<Seed>();
        services.AddCors();
        services.AddScoped<IAuthRepository, AuthRepository>();
        services.AddScoped<IUserRepository, UserRepository>();
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(Options =>
            {
                Options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            }

        );

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env ,Seed seeder)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler(builder =>
            {
                builder.Run(async context =>
                {
                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                    var error = context.Features.Get<IExceptionHandlerFeature>();
                    if (error != null)
                    {
                        context.Response.AddApplicationError(error.Error.Message);
                        await context.Response.WriteAsync(error.Error.Message).ConfigureAwait(false);
                    }
                });
            });
        }
        seeder.SeedUser();
        app.UseCors(x=>x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
        app.UseMvc();
    }
}

}

언급URL : https://stackoverflow.com/questions/46063945/cannot-resolve-dbcontext-in-asp-net-core-2-0

반응형