ASP에서 DbContext를 확인할 수 없습니다.NET Core 2.0
우선, 데이터베이스에 샘플 데이터를 시드하려고 합니다.(스타트업에서) 이렇게 하는 방법이라고 읽었습니다.구성)(ASP를 참조하십시오.NET Core RC2 시드 데이터베이스)
ASP를 사용하고 있습니다.기본 옵션이 포함된 NET Core 2.0.
평소처럼, 나는 나의DbContext
에ConfigureServices
하지만 그 이후로 스타트업에서.다음을 사용하여 해결하려고 할 때 방법 구성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이 지적한 것에 대한 공로.CreateScope
EF 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
'programing' 카테고리의 다른 글
익명 기능에서 작동하지 않는 lodash 디바운스 (0) | 2023.08.29 |
---|---|
터치스크린용 jQuery UI 'draggable()' 디바지블을 만들려면 어떻게 해야 합니까? (0) | 2023.08.29 |
IIS AppPool 작업자 프로세스 ID를 가져오는 방법 (0) | 2023.08.29 |
printf를 사용하여 64비트 정수를 교차 플랫폼으로 인쇄 (0) | 2023.08.29 |
mysql - IF 문 내에서 코드 블록을 실행하는 방법(프로시저에서는 실행하지 않음) (0) | 2023.08.29 |