2012-08-07 90 views
15

如果您使用的是object symx数据模型(带有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连接字符串 - 这是实体模型的提供程序连接字符串,我知道我需要的连接字符串始终是实体模型的相同连接字符串。

但是,如何获得提供程序连接字符串programmaticaly?我坚持没有成功浏览模型实例...

以下:

ModelInstance.Connection.ConnectionString 

包含有类似“NAME = TestBotEntities”,甚至整个连接字符串。所以,我想:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString 

而是一个包含整个实体连接字符串,我只是不知道如何分析它,如何从中只得到供应商的连接字符串。

回答

33

原来有两种方法。

我可以通过EntityConnectionStringBuilder解析实体连接字符串:

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

...或者,如果我有可用的特定模型实例,我可以从这里得到它。

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString; 
相关问题