다음을 통해 공유


연결 문자열(Entity Framework)

연결 문자열에는 데이터 공급자에서 데이터 소스에 매개 변수로 전달되는 초기화 정보가 들어 있습니다. 연결 문자열 구문은 데이터 공급자에 따라 다르며 연결을 열려고 시도하는 동안 연결 문자열이 구문 분석됩니다. Entity Framework에서 사용하는 연결 문자열에는 Entity Framework를 지원하는 기본 ADO.NET 데이터 공급자에 연결하는 데 사용되는 정보가 들어 있습니다. 또한 필요한 EDM(엔터티 데이터 모델) 매핑 및 메타데이터에 대한 정보가 포함되어 있습니다.

연결 문자열은 EntityClient 공급자가 EDM 매핑 및 메타데이터에 액세스하고 데이터 소스에 연결할 때 사용됩니다. EntityConnectionConnectionString 속성을 통해 연결 문자열에 액세스하거나 설정할 수 있습니다. EntityConnectionStringBuilder 클래스를 사용하여 프로그래밍 방식으로 연결 문자열의 매개 변수를 생성하거나 액세스할 수 있습니다. 자세한 내용은 방법: EntityConnection 연결 문자열 작성(Entity Framework)을 참조하십시오.

엔터티 데이터 모델 도구에서는 응용 프로그램의 구성 파일에 저장되는 연결 문자열을 생성합니다. ObjectContext는 개체 쿼리를 만들 때 자동으로 이 연결 정보를 검색합니다. ObjectContext 인스턴스에서 사용하는 EntityConnectionConnection 속성에서 액세스할 수 있습니다. 자세한 내용은 개체 서비스에서 연결 관리(Entity Framework)를 참조하십시오.

연결 문자열 매개 변수

연결 문자열 형식은 키/값 매개 변수 쌍의 세미콜론으로 구분된 목록입니다.

keyword1=value; keyword2=value;

각 키워드와 해당 값은 등호(=)로 연결됩니다. 키워드는 대/소문자를 구분하지 않으며 키/값 쌍 간의 공백은 무시됩니다. 하지만 데이터 소스에 따라 값은 대/소문자를 구분할 수 있습니다. 세미콜론, 작은따옴표 또는 큰따옴표가 포함된 값은 큰따옴표로 묶어야 합니다. 다음 표에는 ConnectionString에 포함되는 키워드 값의 올바른 이름이 정리되어 있습니다.

키워드 설명

Provider

Name 키워드를 지정하지 않은 경우에 필요합니다. 기본 공급자의 DbProviderFactory 개체를 검색하는 데 사용되는 공급자 이름입니다. 이 값은 상수입니다.

Name 키워드가 엔터티 연결 문자열에 포함되어 있지 않은 경우 Provider 키워드에 대해 비어 있지 않은 값이 필요합니다. 이 키워드는 Name 키워드와 함께 사용할 수 없습니다.

Provider Connection String

선택 사항입니다. 기본 데이터 소스에 전달되는 공급자별 연결 문자열을 지정합니다. 이 연결 문자열은 데이터 공급자의 유효한 키워드/값 쌍을 사용하여 표현됩니다. Provider Connection String이 올바르지 않으면 데이터 소스에서 해당 문자열을 평가할 때 런타임 오류가 발생합니다.

이 키워드는 Name 키워드와 함께 사용할 수 없습니다.

Provider Connection String의 값은 따옴표로 묶어야 합니다. 예를 들면 다음과 같습니다.

Provider Connection String ="Server=serverName; User ID = userID";

다음은 잘못된 예제입니다.

Provider Connection String =Server=serverName; User ID = userID

Metadata

Name 키워드를 지정하지 않은 경우에 필요합니다. 메타데이터와 매핑 정보를 검색할 대상 디렉터리, 파일 및 리소스 위치에 대한 파이프로 구분된 목록입니다. 예를 들면 다음과 같습니다.

Metadata=

c:\model | c:\model\sql\mapping.msl;

파이프 구분 기호 양쪽의 공백은 무시됩니다.

이 키워드는 Name 키워드와 함께 사용할 수 없습니다.

Name

응용 프로그램에서는 필수 키워드/값 연결 문자열 값을 제공하는 응용 프로그램 구성 파일에 연결 이름을 선택적으로 지정할 수 있습니다. 이 경우에는 연결 문자열에 이름을 직접 지정할 수 없습니다. Name 키워드는 구성 파일에 사용할 수 없습니다.

Name 키워드가 엔터티 연결 문자열에 포함되어 있지 않은 경우 Provider 키워드에 대해 비어 있지 않은 값이 필요합니다.

이 키워드는 다른 모든 연결 문자열 키워드와 함께 사용할 수 없습니다.

다음은 응용 프로그램 구성 파일에 저장된 AdventureWorks Sales 모델에 대한 연결 문자열의 예제입니다.

<connectionStrings>
    <add name="AdventureWorksEntities" 
         connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
         multipleactiveresultsets=true'" providerName="System.Data.EntityClient" />
    <add name="NorthwindEntities" connectionString="metadata=.\Northwind.csdl|.\Northwind.ssdl.\Northwind.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=True'" 
         providerName="System.Data.EntityClient" />
</connectionStrings>

EDM 매핑 및 메타데이터 위치

Metadata 매개 변수에는 EntityClient 공급자가 EDM 매핑 및 메타데이터 파일을 검색할 위치 목록이 포함됩니다. 매핑 및 메타데이터 파일은 응용 프로그램 실행 파일과 동일한 디렉터리에 배포되는 경우가 많습니다. 이러한 파일을 특정 위치에 배포하거나 응용 프로그램에 포함 리소스로 포함할 수도 있습니다.

포함 리소스는 다음과 같이 지정됩니다.

Metadata=res://<assemblyFullName>/<resourceName>. 

다음 옵션을 사용하여 포함 리소스의 위치를 정의할 수 있습니다.

옵션

설명

assemblyFullName

포함 리소스가 있는 어셈블리의 전체 이름입니다. 이 이름에는 다음과 같이 단순한 이름, 버전 이름, 지원되는 문화권 및 공개 키가 포함됩니다.

ResourceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

응용 프로그램이 액세스할 수 있는 모든 어셈블리에 리소스를 포함할 수 있습니다.

assemblyFullName에 와일드카드(*)를 지정하면 Entity Framework 런타임은 다음 위치에서 이 순서대로 리소스를 검색합니다.

  1. 호출 어셈블리

  2. 참조된 어셈블리

  3. 응용 프로그램의 bin 디렉터리에 있는 어셈블리

파일이 이러한 위치 중 하나에 없으면 예외가 throw됩니다.

Note참고

와일드카드(*)를 사용하면 Entity Framework는 모든 어셈블리에서 올바른 이름을 가진 리소스를 검색해야 합니다. 성능을 향상시키려면 와일드카드 대신 어셈블리 이름을 지정합니다.

resourceName

AdvendtureWorksModel.csdl과 같은 포함된 리소스의 이름입니다. 메타데이터 서비스는 확장명이 .csdl, .ssdl 또는 .msl인 파일 또는 리소스만 찾습니다. resourceName을 지정하지 않으면 모든 EDM 리소스가 로드됩니다. 리소스 이름은 어셈블리 내에서 고유해야 합니다. 같은 이름을 가진 여러 파일이 어셈블리의 서로 다른 디렉터리에 정의되어 있으면 resourceName에서 리소스 이름 앞에 폴더 구조가 포함되어야 합니다(예: FolderName.FileName.csdl).

assemblyFullName에 와일드카드(*)를 지정한 경우에는 resourceName이 필요하지 않습니다.

Note참고

성능을 향상시키려면 호출 어셈블리에 기본 매핑 및 메타데이터 파일에 대한 참조가 없는 웹이 아닌 시나리오를 제외하고 호출 어셈블리에 리소스를 포함합니다.

다음 예제에서는 호출 어셈블리, 참조된 어셈블리 및 응용 프로그램의 bin 디렉터리에 있는 기타 어셈블리의 모든 EDM 메타데이터 아티팩트를 로드합니다.

Metadata=res://*/

다음 예제에서는 AdventureWorks 어셈블리의 model.csdl 파일을 로드하고, 실행 중인 응용 프로그램의 기본 디렉터리에서 model.ssdl 및 model.msl 파일을 로드합니다.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.csdl|model.ssdl|model.msl

다음 예제에서는 특정 어셈블리의 지정된 리소스 세 개를 로드합니다.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.csdl| 
res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.ssdl| 
res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.msl

다음 예제에서는 확장명이 .csdl, .msl 및 .ssdl인 어셈블리의 모든 포함 리소스를 로드합니다.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/

다음 예제에서는 로드된 어셈블리 위치의 상대 파일 경로 및 "datadir\metadata\"에 있는 모든 리소스를 로드합니다.

Metadata=datadir\metadata\

다음 예제에서는 로드된 어셈블리 위치의 상대 파일 경로에 있는 모든 리소스를 로드합니다.

Metadata=.\

|DataDirectory| 대체 문자열 및 웹 응용 프로그램 루트 연산자(~) 지원

DataDirectory 및 ~ 연산자는 MetadataProvider Connection String 키워드의 일부로 ConnectionString에서 사용됩니다. EntityConnectionDataDirectory 및 ~ 연산자를 각각 MetadataWorkspace 및 저장소 공급자에 전달합니다.

용어 설명

|DataDirectory|

매핑 및 메타데이터 파일에 대한 상대 경로로 확인됩니다. 이 값은 AppDomain.SetData("DataDirectory", objValue) 메서드를 통해 설정됩니다. DataDirectory 대체 문자열은 파이프 문자로 묶어야 하며, 해당 이름과 파이프 문자 사이에 공백이 없어야 합니다. DataDirectory 이름은 대/소문자를 구분하지 않습니다.

"DataDirectory"라는 실제 디렉터리를 메타데이터 경로 목록의 멤버로 전달해야 하는 경우 이름의 한쪽 또는 양쪽에 공백을 추가해야 합니다. 예: Metadata="DataDirectory1 | DataDirectory | DataDirectory2". ASP.NET 응용 프로그램은 |DataDirectory|를 "<application root>/app_data" 폴더로 확인합니다.

~

웹 응용 프로그램 루트로 확인됩니다. 선행 위치에 있는 ~ 문자는 항상 웹 응용 프로그램 루트 연산자(~)로 해석되지만, 유효한 로컬 하위 디렉터리를 나타낼 수도 있습니다. 이러한 로컬 하위 디렉터리를 참조하려면 사용자가 명시적으로 ./~를 전달해야 합니다.

DataDirectory 및 ~ 연산자는 경로의 시작 부분에만 지정해야 하며, 다른 위치에 있으면 확인되지 않습니다. Entity Framework에서 ~/data를 확인하려고 하지만 /data/~를 실제 경로로 처리합니다.

DataDirectory 또는 ~ 연산자로 시작하는 경로는 DataDirectory 및 ~ 연산자 분기 외부의 실제 경로로 확인할 수 없습니다. 예를 들어 ~ , ~/data, ~/bin/Model/SqlServer 경로는 확인됩니다. 하지만 ~/.., ~/../other 경로는 확인되지 않습니다.

DataDirectory 및 ~ 연산자를 확장하여 |DataDirectory|\Model, ~/bin/Model와 같은 하위 디렉터리를 포함할 수 있습니다.

DataDirectory 대체 문자열 및 ~ 연산자 확인은 비재귀적입니다. 예를 들어 DataDirectory~ 문자가 포함되어 있으면 예외가 발생합니다. 이 동작은 무한 재귀를 방지합니다.

참고 항목

개념

배포 고려 사항(Entity Framework)
개체 서비스에서 연결 관리(Entity Framework)

기타 리소스

엔터티 서비스 및 데이터 공급자(Entity Framework)
연결 및 트랜잭션 관리(Entity Framework 작업)
연결 문자열(ADO.NET)