从实体连接字符串中提取连接字符串

时间:2011-02-27 23:47:57

标签: .net ado.net web-config

创建和ADO.NET实体连接字符串时,您会得到类似

的内容
<add name="MREntities" connectionString="metadata=res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.csdl|res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.ssdl|res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv&quot;" providerName="System.Data.EntityClient" />

我的问题是如何从中获取真正的内部连接字符串以调用make sql连接来调用存储过程,自定义sql语句等?具体来说,我需要从中提取这部分

server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv

5 个答案:

答案 0 :(得分:29)

假设您有ObjectContext的实例(如果您使用的是内置设计器,则您的上下文派生自EF ObjectContext类)。您可以将ObjectContext.Connection属性(即DbConnection)的值强制转换为EntityConnection

EntityConnection类有一个属性StoreConnection,它是用于连接数据库的实际DbConnection。这个实际上将ConnectionString属性设置为您要查找的属性。

编辑:一些示例代码(为ObjectContext指定上下文):

ObjectContext context = entities;
EntityConnection entityConnection = context.Connection as EntityConnection;
if (null != entityConnection)
{
    Console.WriteLine(entityConnection.StoreConnection.ConnectionString);
}

答案 1 :(得分:21)

虽然Jan Remunda正确地指出您不需要创建上下文,并且如果您想在阅读EntityClient连接字符串后立即明确创建连接,他的解决方案很有用,但它仍然有点如果您想要的只是检索内部提供者连接字符串(这是OP要求的话),那就很复杂。

确实,您不必打开连接,只需检索内部ConnectionString的{​​{1}},然后立即将其丢弃,但为什么?

改为使用相应的连接字符串构建器:

StoreConnection

请参阅EntityConnectionStringBuilder

答案 2 :(得分:10)

您不需要创建ObjectContext的实例。因为在这种情况下,您必须引用存储元数据的程序集,并且性能也不是很好。

在StoreConnection属性中获取提供程序连接字符串的方法更简单。

 using (var ec = new EntityConnection(connstr.ConnectionString))
 {
   var sqlConn = ec.StoreConnection as SqlConnection;
   sqlConn.Open();
 }

答案 3 :(得分:2)

我们可以使用以下代码仅从没有元数据信息的实体框架连接字符串中提取连接字符串。

string connectionString = new MREntities().Database.Connection.ConnectionString

答案 4 :(得分:-5)

试试这个:

conn = ConfigurationManager.ConnectionStrings["MREntities"].ConnectionString;