Come ottenere ConnectionString da EF7 DbContext

asp.net-core asp.net-core-mvc c# entity-framework-core

Domanda

Il mio scenario:

Sto usando EF7 per le operazioni CRUD standard e Dapper per query più complesse che richiedono un aumento della velocità. Da startup.cs sto iniettando il mio DbContext nel mio DAL, che ovviamente fa le query del database. Dapper richiede una stringa di connessione. Voglio iniettare la mia stringa di connessione DbContext EF7 nella query di Dapper.

La mia domanda:

Come ottengo la stringa di connessione da DbContext come prima: DbContext.Database.Connection ?

È stato modificato dal Database al tipo DatabaseFacade in EF7 e, con questo, anche la DbConnection Connection stata rimossa.

Sicuramente ci dovrebbe essere qualche stringa di connessione persistente nel DbContext che posso interrogare?

La mia ricerca:

Il metodo che sto usando al momento è, e funziona:

public partial class CustomContext : DbContext
{
    public readonly string _connectionString;

    public CustomContext (DbContextOptions options)
        : base(options)
    {
            _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
    }
}

So che è ancora in beta, ma mi manca qualcosa?

Grazie per il tuo tempo.

Risposta accettata

Ho cercato le fonti EF7 e sembra che tu abbia ragione con il tuo approccio attuale.

La stringa di connessione è memorizzata in SqlServerOptionsExtension . Quando chiami UseSqlServer(connectionString) il codice è il seguente (estratti solo linee interessanti):

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

Non sono sicuro del motivo per cui la stringa di connessione è stata rimossa dal luogo ovvio, ma potrebbe essere che gli sviluppatori abbiano estratto la stringa di connessione per consentirci di utilizzare database non standard (come database in memoria, ecc.).

Questo sembra molto più chiaro IMO:

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

Risposta popolare

Se hai un contesto completamente materializzato, puoi anche usare questo:

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché