EF7 DbContext에서 ConnectionString을 가져 오는 방법

asp.net-core asp.net-core-mvc c# entity-framework-core

문제

내 시나리오 :

표준 CRUD 작업에는 EF7을 사용하고 속도는 증가시켜야하는 더 복잡한 쿼리에는 Dapper를 사용하고 있습니다. startup.cs에서 DAL에 DbContext 를 주입하고 있습니다. 그러면 데이터베이스 쿼리가 수행됩니다. Dapper에는 연결 문자열이 필요합니다. EF7 DbContext 연결 문자열을 Dapper 쿼리에 삽입하고 싶습니다.

내 질문:

이전처럼 DbContext에서 연결 문자열을 얻는 방법 : DbContext.Database.Connection ?

EF7에서는 Database 에서 DatabaseFacade 유형으로 바뀌었고 DbConnection Connection 도 제거되었습니다.

확실히 내가 쿼리 할 수있는 DbContext 에 영구 연결 문자열이 있어야합니까?

내 연구 :

내가 지금 사용하고있는 방법은 다음과 같습니다.

public partial class CustomContext : DbContext
{
    public readonly string _connectionString;

    public CustomContext (DbContextOptions options)
        : base(options)
    {
            _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
    }
}

아직 베타 버전 인 것을 알고 있지만, 뭔가 빠져 있습니까?

시간 내 줘서 고마워.

수락 된 답변

EF7 소스를 검색했는데 현재 접근 방식에 문제가 없다고 생각됩니다.

연결 문자열은 SqlServerOptionsExtension 저장됩니다. UseSqlServer(connectionString) 를 호출 하면 코드 는 다음과 같습니다 (흥미로운 행만 추출).

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

내가 왜 연결 문자열이 명백한 장소에서 제거되었는지 모르겠지만 devs가 비표준 데이터베이스 (예 : 메모리 데이터베이스 등)를 사용할 수 있도록 연결 문자열을 추상화 한 것일 수 있습니다.

이것은 훨씬 더 명확 해 보이는 IMO :

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

인기 답변

완전히 구체화 된 컨텍스트가있는 경우 다음을 사용할 수도 있습니다.

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();



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