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

dko*_*dko 18 .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" />
Run Code Online (Sandbox Code Playgroud)

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

server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv
Run Code Online (Sandbox Code Playgroud)

J. *_*hon 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);
}
Run Code Online (Sandbox Code Playgroud)


tne*_*tne 23

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

确实,你不必打开连接,你可以只检索ConnectionString内部StoreConnection然后立即丢弃它,但为什么呢?

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

new EntityConnectionStringBuilder(outerConnectionString).ProviderConnectionString
Run Code Online (Sandbox Code Playgroud)

请参阅EntityConnectionStringBuilder.

  • 这正是OP所要求的,应该是接受的答案. (3认同)

Jan*_*nda 10

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

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

 using (var ec = new EntityConnection(connstr.ConnectionString))
 {
   var sqlConn = ec.StoreConnection as SqlConnection;
   sqlConn.Open();
 }
Run Code Online (Sandbox Code Playgroud)

  • +1表示不创建上下文的实例. (2认同)