How to get ConnectionString from EF7 DbContext

11,387

Solution 1

I've searched EF7 sources and it seems that you are correct with your current approach.

Connection string is stored in SqlServerOptionsExtension. When you call UseSqlServer(connectionString) the code is as follows (extracted only interesting lines):

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

I'm not sure why connection string was removed from obvious place, but it may be that devs abstracted away connection string to allow us to use non-standard databases (like in-memory database etc.).

This looks much clearer IMO:

Configuration.Get("Data:ConnectionString")

Solution 2

If you have a fully materialized context, you can also use this:

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();
Share:
11,387
Nick De Beer
Author by

Nick De Beer

Updated on July 28, 2022

Comments

  • Nick De Beer
    Nick De Beer almost 2 years

    My Scenario:

    I'm using EF7 for standard CRUD operations and Dapper for more complex queries that require increase in speed. From startup.cs I'm injecting my DbContext into my DAL which does then obviously does the database queries. Dapper requires a connection string. I want to inject my EF7 DbContext connection string into the Dapper query.

    My Question:

    How do I get the connection string from the DbContext like before: DbContext.Database.Connection?

    It changed from Database to DatabaseFacade type in EF7, and with that, DbConnection Connection was also removed.

    Surely there should be some persistent connection string in the DbContext that I can query?

    My Research:

    The method I'm using at the moment is, and it works:

    public partial class CustomContext : DbContext
    {
        public readonly string _connectionString;
    
        public CustomContext (DbContextOptions options)
            : base(options)
        {
                _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
        }
    }
    

    I know its still in beta, but am I missing something?

    Thanks for your time.

  • Chris
    Chris over 4 years
    This works great but bear in mind the password will no longer be available after a connection is opened, unless Persist Security Info is set to true in the connection string.