DbContext 인스턴스는 OnConfiguring 내에서 사용할 수 없으므로이 시점에서 구성 중입니다.

asp.net-core asp.net-core-mvc entity-framework-core razorengine

문제

사용자 정의보기 위치 시스템을 구축하려고합니다.

public class myViewLocationExpander : IViewLocationExpander
{
    private myDBContext _context;

    public myViewLocationExpander (myDBContext context)
    {
        _context = context;
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        _context.Property.//..... //Error happened here
           Some other codes
    }

그리고 내 시작 파일에

public class myViewLocationExpander : IViewLocationExpander
{
    private myDBContext _context;

    public myViewLocationExpander (myDBContext context)
    {
        _context = context;
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        _context.Property.//..... //Error happened here
           Some other codes
    }

내 오류 1 :

요청을 처리하는 중 처리되지 않은 예외가 발생했습니다. InvalidOperationException : 데이터베이스 공급자가 구성되어 있지 않습니다. DbContext 클래스의 OnConfiguring 또는 서비스 설정시 AddDbContext 메서드를 재정 의하여 데이터베이스 공급자를 구성합니다. Microsoft.Data.Entity.Internal.DatabaseProviderSelector.SelectServices (ServiceProviderSource 공급자 소스)

오류 2 :

EntityFramework.Core.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다. 추가 정보 : 구성되는 동안 컨텍스트를 사용하려고했습니다. DbContext 인스턴스는 OnConfiguring 내에서 사용할 수 없으므로이 시점에서 구성 중입니다.

시작 파일의 Configure() 메소드에 배치해야하는 클래스에서 dbcontext (DB에서 일부 정보를 가져와야 함)를 사용하려면 어떻게해야합니까?

아니면 IViewLocation ..을 다른 장소에 둘 수 있습니까?

인기 답변

IViewLocationExpander에 대한 코드에서 다음 코드를 사용하여 컨텍스트에서 IServiceProvider를 가져올 수 있습니다. context.ActionContext.HttpContext.ApplicationServices.GetService( typeof( myDbContext ) ) 그러면 DbContext가 반환됩니다.

public class MyViewLocationExpander : IViewLocationExpander
{
    public void PopulateValues( ViewLocationExpanderContext context )
    {
        var dbContext = context.ActionContext.HttpContext.ApplicationServices.GetService<ApplicationDbContext>();
    }

    public IEnumerable<string> ExpandViewLocations( ViewLocationExpanderContext context, IEnumerable<string> viewLocations )
    {
        var dbContext = context.ActionContext.HttpContext.ApplicationServices.GetService<ApplicationDbContext>();
        return viewLocations;
    }
}

PopulateValues가 두 번째로 작동하는 것으로 나타났습니다.이 시간을 더 볼 시간이 없었습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.