簡體   English   中英

來自 Entity Framework 的提供程序連接字符串

[英]Provider connection string from Entity Framework

如果您正在使用對象上下文數據模型(帶有 EDMX 文件),則在創建過程中您可能需要在配置文件中指定連接字符串。

不幸的是,連接字符串不是通用連接字符串,因為它包含一些……實體連接所需的東西。 MySql 連接示例:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" />

我遇到的問題是此連接字符串在參數“提供程序連接字符串”中包含提供程序的連接字符串。

出於特定原因,我需要創建一個與實體模型無關的新 MySqlConnection。 為了創建 MySqlConnection,我需要為其提供 mysql 連接字符串——這是實體模型的提供者連接字符串,我知道我需要的連接字符串始終與實體模型的連接字符串相同。

但是如何以編程方式獲取提供程序連接字符串? 我一直在瀏覽模型實例,但沒有成功……

下列:

ModelInstance.Connection.ConnectionString

包含類似“name=TestBotEntities”的內容,甚至不包含整個連接字符串。 所以我嘗試了:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString

但是那個包含整個實體連接字符串,我只是不知道如何解析它,如何只從中獲取提供者連接字符串。

原來有兩種方法。

我可以通過 EntityConnectionStringBuilder 解析實體連接字符串:

string entityConnectionString = ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString;
string providerConnectionString = new EntityConnectionStringBuilder(entityConnectionString).ProviderConnectionString;

...或者如果我有可用的特定模型實例,我可以從這里獲取它。

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;

我不得不承認我作弊了,因為我不想在我正在處理的項目中依賴 EF 的程序集。 因此,我使用正則表達式來“解析”“提供者連接字符串”值:

provider connection string="(.+)";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM