是否有.net方法来获取实体框架连接字符串的数据源?

本文关键字:字符串 连接 数据源 框架 实体 net 方法 获取 是否 | 更新日期: 2023-09-27 17:54:49

我想从连接字符串中获取数据源。我知道我可以使用

ConfigurationManager.ConnectionStrings["name"].ConnectionString

并使用正则表达式将其提取出来。但是,似乎应该有一种简单的方法来获取这个数据源。我不想从字符位置抓取,因为这对于字符串顺序的任何改变都是脆弱的。


我正在使用实体框架4。生成以

开头的连接字符串。
metadata=res://*/

这似乎使事情变得复杂,因为建议的对象SqlConnectionStringBuilder抛出错误

"关键字不支持:'metadata'."

是否有.net方法来获取实体框架连接字符串的数据源?

可以这样做(vb.net):

Dim varConnectionString = Web.Configuration.WebConfigurationManager.ConnectionStrings("iSAMDBEntities").ConnectionString
Dim ecb As EntityConnectionStringBuilder = New EntityConnectionStringBuilder(varConnectionString)
varConnectionString = ecb.ProviderConnectionString
Dim varBiulder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder(varConnectionString)
varServidor = varBiulder.DataSource
varBaseDatos = varBiulder.InitialCatalog
varUsuario = varBiulder.UserID
varClave = varBiulder.Password

如果你得到元数据错误

"关键字不支持:'metadata'."

你可以首先使用EntityConnectionStringBuilder,它可以接受带有元数据的连接字符串。

string connectionStringWithMetadata = ConfigurationManager.ConnectionStrings["DbEntities"].ConnectionString;
EntityConnectionStringBuilder entityConnectionStringBuilder = new EntityConnectionStringBuilder(connectionStringWithMetadata);
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(entityConnectionStringBuilder.ProviderConnectionString);
// And now you can extract parts of the connection string
string dbUserName = connectionStringBuilder.UserID; 
string dbPassword = connectionStringBuilder.Password;

我发现它隐藏在上下文中。

EntityContextName context = new EntityContextName();
string datasourceName = context.Connection.DataSource;

是的,有一门SqlConnectionStringBuilder课程可以让你得到你想要的。

看一下MSDN文档,这应该会让你接近,这里是完整的细节,你很可能只需要枚举键。