連接字串 (Entity Framework)
連接字串 (Connection String) 包含可當做參數從資料提供者 (Data Provider) 傳遞至資料來源的初始化資訊。 此語法會因資料提供者而不同,而且連接字串會在嘗試開啟連接期間進行剖析。 Entity Framework 所使用的連接字串包含用來連接至支援 Entity Framework 之基礎 ADO.NET 資料提供者的資訊。 它們也包含必要之模型和對應檔的相關資訊。
EntityClient 提供者會在存取模型和對應中繼資料,以及連接至資料來源時使用連接字串。 您可以透過 EntityConnection 的 ConnectionString 屬性來存取或設定連接字串。 EntityConnectionStringBuilder 類別 (Class) 可用來以程式設計方式建構或存取連接字串中的參數。 如需詳細資訊,請參閱 HOW TO:建立 EntityConnection 連接字串 (Entity Framework)。
實體資料模型工具會產生儲存在應用程式之組態檔中的連接字串。 ObjectContext 會在建立物件查詢時自動擷取這個連接資訊。 您可以從 Connection 屬性中存取 ObjectContext 執行個體 (Instance) 所使用的 EntityConnection。 如需詳細資訊,請參閱管理連接和交易 (Entity Framework)。
連接字串參數
連接字串的格式是分號分隔的索引鍵/值參數組清單:
keyword1=value; keyword2=value;
等號 (=) 會連接每個關鍵字和其值。 關鍵字不區分大小寫,而且索引鍵/值組之間的空格會被忽略。 不過,根據資料來源而定,值可能會區分大小寫。 包含分號、單引號或雙引號的任何值都必須以雙引號括住。 下表列出 ConnectionString 中關鍵字值的有效名稱。
關鍵字 | 說明 |
---|---|
Provider |
如果沒有指定 Name 關鍵字,就是必要項。 用來擷取基礎提供者之 DbProviderFactory 物件的提供者名稱。 這個值是常數。 當 Name 關鍵字未包含在實體連接字串中時,需要 Provider 關鍵字的非空白值。 此關鍵字與 Name 關鍵字互斥。 |
Provider Connection String |
選擇性項目。 指定傳給基礎資料來源的提供者特定連接字串。 這個連接字串會藉由使用資料提供者的有效關鍵字/值組來表示。 無效的 Provider Connection String 會在資料來源對其進行評估時導致執行階段錯誤。 此關鍵字與 Name 關鍵字互斥。 Provider Connection String 的值必須以引號括住。 以下是一個範例:
下列範例無效:
|
Metadata |
如果沒有指定 Name 關鍵字,就是必要項。 目錄、檔案和資源位置的垂直線分隔清單,您可在其中尋找中繼資料和對應資訊。 以下是一個範例:
忽略垂直線分隔符號兩端的空白。 此關鍵字與 Name 關鍵字互斥。 |
Name |
應用程式可選擇性的在應用程式組態檔中指定連接名稱,以提供必要的關鍵字/值連接字串值。 在此情況下,您不能在連接字串中直接提供這些值。 在組態檔中不允許 Name 關鍵字。 當 Name 關鍵字未包含在連接字串中時,需要 Provider 關鍵字的非空白值。 此關鍵字與所有其他連接字串關鍵字互斥。 |
下面是儲存在應用程式組態檔中 AdventureWorks Sales Model 之連接字串的範例:
<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" />
</connectionStrings>
模型和對應檔案位置
Metadata 參數包含要讓 EntityClient 提供者搜尋模型和對應檔案的位置清單。 模型和對應檔案通常會與應用程式可執行檔部署在相同的目錄中。 這些檔案也可以部署在特定位置中,或當做內嵌資源包含在應用程式中。
內嵌資源的指定方式如下:
Metadata=res://<assemblyFullName>/<resourceName>.
下列選項可用於定義內嵌資源的位置:
選項 |
說明 |
assemblyFullName |
含有內嵌資源之組件 (Assembly) 的完整名稱。 此名稱包括簡單名稱、版本名稱、支援的文化特性 (Culture) 和公開金鑰 (Public Key),如下所示:
資源可以內嵌在應用程式可存取的任何組件中。 如果您針對 assemblyFullName 指定了萬用字元 (*),Entity Framework 執行階段將會按照這個順序在下列位置中搜尋資源:
如果這些檔案不在其中一個位置內,就會擲回例外狀況 (Exception)。
注意:
當您使用萬用字元 (*) 時,Entity Framework 必須逐一查看所有組件,以便找出含有正確名稱的資源。若要改善效能,請指定組件名稱而非萬用字元。
|
resourceName |
內含資源的名稱,例如 AdvendtureWorksModel.csdl。 中繼資料服務只會尋找具有下列其中一個副檔名的檔案或資源:.csdl、.ssdl 或 .msl。 如果沒有指定 resourceName,就會載入所有中繼資料資源。 這些資源應該在組件中具有唯一的名稱。 如果您在組件的不同目錄中定義了具有相同名稱的多個檔案,resourceName 就必須在資源名稱前面包含資料夾結構,例如 FolderName.FileName.csdl。 當您針對 assemblyFullName 指定萬用字元 (*) 時,不需要使用 resourceName。 |
注意: |
---|
若要改善效能,請在呼叫組件中內嵌資源,但非 Web 案例 (呼叫組件中沒有基礎對應和中繼資料檔案的參考) 除外。 |
下列範例會載入呼叫組件、參考的組件和應用程式 bin 目錄中其他組件的所有模型和對應檔案。
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| 替代字串和 Web 應用程式根目錄運算子 (~) 的支援
DataDirectory 和 ~ 運算子會用於 ConnectionString 中,當做 Metadata 和 Provider Connection String 關鍵字的一部分。 EntityConnection 會分別將 DataDirectory 和 ~ 運算子轉送至 MetadataWorkspace 和存放區提供者。
字彙 | 說明 |
---|---|
|DataDirectory| |
解析成對應和中繼資料檔案的相對路徑。 這是透過 如果名為 "DataDirectory" 的實體目錄必須當做中繼資料路徑清單的成員傳遞,請在名稱的任一側或兩側加上空白字元,例如: |
~ |
解析成 Web 應用程式根目錄。 位於前置位置的 ~ 字元一律會解譯成 Web 應用程式根目錄運算子 (~),不過它可能會代表有效的本機子目錄。 若要參考這類本機子目錄,使用者應該明確傳遞 |
您應該只在路徑的開頭指定 DataDirectory 和 ~ 運算子,因為它們無法在任何其他位置進行解析。 Entity Framework 將嘗試解析 ~/data
,但是它會將 /data/~
視為實體路徑。
以 DataDirectory 或 ~ 運算子為開頭的路徑無法解析成 DataDirectory 和 ~ 運算子分支外部的實體路徑。 例如,下列路徑將會解析:~
、~/data
和 ~/bin/Model/SqlServer
。 下列路徑將無法解析:~/..
和 ~/../other
。
DataDirectory 和 ~ 運算子可擴充成包含子目錄,如下所示:|DataDirectory|\Model
和 ~/bin/Model
。
DataDirectory 替代字串和 ~ 運算子的解析並非遞迴方式。 例如,當 DataDirectory 包含 ~ 字元時,就會發生例外狀況。 這可防止無限遞迴 (Infinite Recursion)。
另請參閱
概念
部署考量因素 (Entity Framework)
管理連接和交易 (Entity Framework)