Entity Framework 中的提供程序连接字符串

20

如果您正在使用对象上下文数据模型(带有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" />

我的问题是这个连接字符串包含在参数"provider connection string"中的提供程序的连接字符串。

出于某些特定原因,我需要创建一个新的MySqlConnection,与实体模型无关。 为了创建MySqlConnection,我需要提供mysql连接字符串 - 这是实体模型的提供程序连接字符串,而我知道我需要的连接字符串始终是实体模型的相同连接字符串。

但是如何以编程方式获取提供程序连接字符串?我试着浏览模型实例,但没有成功……

以下是:

ModelInstance.Connection.ConnectionString

包含类似于"name=TestBotEntities"的内容,甚至不是整个连接字符串。所以我尝试了以下方法:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString

但是那个字符串包含整个实体的连接字符串,我不知道如何解析它,如何从中获取只有提供程序连接字符串。

2个回答

42

原来有两种方法。

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

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

如果我有特定的模型实例可用,我可以从这里获取它。

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

0

我必须承认我作弊了,因为我不想在我正在工作的项目中依赖EF的程序集。所以我使用正则表达式来“解析”'提供程序连接字符串'的值,如下:

provider connection string="(.+)";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接