Entity Framework 7 / MVC 6에서 연결 문자열을 동적으로 변경하십시오 (요청 당).

asp.net-core asp.net-core-mvc azure-sql-database entity-framework-core

문제

MVC 6 응용 프로그램에 액세스하는 사람에 따라 다른 데이터베이스 (즉, 실제 파일이지만 동일한 스키마)에 연결해야하는 응용 프로그램이 있습니다. 즉, 웹 응용 프로그램의 각 고객은 Azure의 SQL 데이터베이스 (성능, 가격 수준 등이 다름)에서 격리 된 데이터를 갖지만 모든 데이터베이스는 동일한 관계형 스키마를 공유합니다. 물론 Entity Framework 컨텍스트 수업.

var cadConexion = @"Server=(localdb)\mssqllocaldb;Database=DBforCustomer1;Trusted_Connection=True;";
services.AddEntityFramework().AddSqlServer().AddDbContext<DAL.ContextoBD>(options => options.UseSqlServer(cadConexion));

문제는이 방법으로 서비스를 등록하면 구체적인 고객을 위해 구체적인 데이터베이스에 연결했기 때문에 미들웨어 실행이 시작될 때 후자를 변경할 수 있는지 여부를 알지 못합니다 (이것이 중요한 점은 문에서 누가 울리고 있는지 알 수 있습니다.)

나는 매개 변수로 연결 문자열을 전달하는 데이터베이스 컨텍스트를 구성 할 수 있지만 이것은 모든 요청 adn에 대해 런타임에 데이터베이스 컨텍스트 (초기 파이프 라인)를 만들어야 함을 암시합니다. 이것이 잠재적으로 불충분 할 수 있는지를 모릅니다. 또는 나쁜 습관. 게다가 나는이 방법으로 데이터베이스 콘텍스트를 내 컨트롤러에 주입하는 서비스로 등록 할 수 없다고 생각한다.

이것에 대한 올바른 접근법은 무엇입니까? 누구도 프로덕션 환경에서 비슷한 구성을 사용하고 있습니까?

미리 감사드립니다.

수락 된 답변

우선, 요청마다 연결 문자열을 교환하지 않는 것이 좋습니다.

하지만 그건 문제가 아닙니다. 당신은 이것을 할 수 있습니다. DbContext에 새로운 연결 문자열을 전달해야합니다.

.AddDbContext 는 연결 문자열을 종속성 주입 컨테이너에 캐시하므로 DI를 사용하여이 시나리오를 작동시킬 수 없습니다. 대신 DbContext를 직접 인스턴스화하고 새 연결 문자열을 전달해야합니다.


인기 답변

나는 내 자신의 질문에 대답하지 않기를 원했을 것이다. 그러나 나는 인터넷을 통해 오랜 깊이 연구 한 끝에 유사한 문제를 가진 사람들에게 지침을 제공해야한다고 생각한다. 그래서 나는 다중 연결 시나리오를 테스트하는데 많은 시간을 절약 할 수있다. 아주 힘드네.

필자는 마침내 "Elastic Database Tools"라는 Azure의 API (최근)와 API를 간결하게 사용했습니다. 구체적으로는 SaaS (서비스로서의 소프트웨어)를위한 구체적인 문제를 해결하기위한 Microsoft의 도구 집합입니다. 시나리오 (광산이 그렇듯이).

다음은 좋은 링크입니다.

https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-get-started/

귀하의 프로젝트에 행운을 빌어 요!




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