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

问题描述 投票:18回答:5

当创建和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" />

我的问题是你如何抓住从内心的真实连接字符串拨打的手动SQL连接调用存储过程,定制的SQL语句等等?具体来说,我需要这部分从中提取

server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv
.net ado.net web-config
5个回答
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);
}

22
投票

虽然扬Remunda正确地指出,你并不需要创建一个上下文,而如果你想阅读EntityClient连接字符串之后明确地创建连接他的解决方案是非常有用的,它仍然是,如果你想要的是一个有点令人费解检索内提供连接字符串(这是什么OP要求)。

这是真的,你不必打开连接,你可以检索内ConnectionStringStoreConnection然后之后丢弃它,但是为什么呢?

使用适当的连接字符串生成器来代替:

new EntityConnectionStringBuilder(outerConnectionString).ProviderConnectionString

EntityConnectionStringBuilder


10
投票

你并不需要创建ObjectContext的实例。因为在这种情况下,你必须引用其中的元数据存储组件和性能是不是也很不错。

还有更简单的办法让StoreConnection财产提供连接字符串。

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

2
投票

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

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

-5
投票

尝试这个 :

conn = ConfigurationManager.ConnectionStrings["MREntities"].ConnectionString;
© www.soinside.com 2019 - 2024. All rights reserved.