如果您正在使用对象上下文数据模型(使用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" />
我遇到的问题是此连接字符串包含参数“provider connection string”中提供程序的连接字符串。
由于某个特定原因,我需要创建一个与实体模型无关的新MySqlConnection。 为了创建MySqlConnection,我需要为它提供mysql连接字符串 - 这是实体模型的提供者连接字符串,我知道我需要的连接字符串始终是实体模型的相同连接字符串。
但是如何获得提供程序连接字符串programmaticaly?我没有成功浏览模型实例......
以下内容:
ModelInstance.Connection.ConnectionString
包含类似“name = TestBotEntities”的内容,甚至不包含整个连接字符串。所以我试过了:
ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString
但是那个包含整个实体连接字符串,我只是不知道如何解析它,如何只从中获取提供者连接字符串。
答案 0 :(得分:39)
原来有两种方法。
我可以通过EntityConnectionStringBuilder解析实体连接字符串:
string entityConnectionString = ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString;
string providerConnectionString = new EntityConnectionStringBuilder(entityConnectionString).ProviderConnectionString;
...或者如果我有特定的模型实例,我可以从这里获得它。
((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;
答案 1 :(得分:0)
我必须承认我作弊了,因为我不想在我正在从事的项目中依赖 EF 的程序集。因此,我使用正则表达式来“解析”“提供者连接字符串”值:
provider connection string="(.+)";