[英]Entity Framework - Use Dynamic connection string with Oracle Provider
[英]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="server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true"" 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.