1

내 응용 프로그램이 dotnet ef * 또는 PowerShell 대안을 통해 실행되고 있는지 감지 할 수있는 방법이 있습니까?EntityFramework Core가 도구 내에서 실행되는지 여부를 확인하는 방법은 무엇입니까?

Entity Framework Core를 사용하여 멀티 테넌트 (multi-tenant) ASP.NET 코어 응용 프로그램을 만들고 어떤 연결 문자열을 사용해야할지 결정할 수 있지만 마이그레이션을 만들거나 데이터베이스를 업데이트 할 때 실행해서는 안됩니다. 명령 행 구성 도중에 DbContext을 사용하기 때문에 HttpContext의 존재 여부를 확인할 수없고 추가 명령 줄 인수 나 환경 변수를 사용할 수 없습니다.

편집 : 이상적 아니라, 연결 문자열이 이미 구성되어 있는지 확인하는 방법을 발견하지만 내 특정 유스 케이스에 도움을 사용할 수 있습니다

optionsBuilder.Options.Extensions 
    .OfType<RelationalOptionsExtension>() 
    .FirstOrDefault()?.ConnectionString 

답변

1

해당 구현 유형을 작성하는 경우 DbContext (또는 시작) 프로젝트의 IDbContextFactory<T>에있는 도구를 사용하면 서비스에서 DbContext을 가져 오거나 직접 인스턴스화하는 대신이 도구가이를 호출합니다.

+0

전에 IDbContextFactory를 시도했지만 종속성 삽입을 지원하지 않으므로 사용하지 않았습니다. 내가 필요한 것을 놓치지 않는 한 모든 필요한 서비스와 설정 의존성을 정적으로 접근 가능하게 만들 필요가있다. –

+1

서비스를 삽입 할 수없는 다른 '메인'처럼 취급하십시오. 'Startup.ConfigureServices()'를 호출하여 서비스 공급자를 구성하거나 두 메소드가 호출 할 수있는 다른 메소드를 제외하십시오. – bricelam

+0

완벽한! 'IHostingEnvironment'가없는'Startup'을위한 대안적인 생성자를 만들었고,'새로운 ServiceCollection'으로'ConfigureServices'를 호출했습니다. –