Comment obtenir ConnectionString à partir de EF7 DbContext

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

Question

Mon scénario:

J'utilise EF7 pour les opérations CRUD standard et Dapper pour les requêtes plus complexes nécessitant une augmentation de la vitesse. De startup.cs, DbContext mon DbContext dans mon DAL, qui effectue ensuite les requêtes de base de données. Dapper nécessite une chaîne de connexion. Je souhaite injecter ma chaîne de connexion EF7 DbContext dans la requête Dapper.

Ma question:

Comment puis-je obtenir la chaîne de connexion à partir de DbContext comme auparavant: DbContext.Database.Connection ?

Le type de Database de DatabaseFacade remplacé par le type DatabaseFacade dans EF7 et, avec cela, DbConnection Connection a également été supprimé.

Il devrait sûrement y avoir une chaîne de connexion persistante dans le DbContext que je puisse interroger?

Ma recherche:

La méthode que j'utilise actuellement est la suivante:

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

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

Je sais que c'est toujours en version bêta, mais est-ce qu'il me manque quelque chose?

Merci pour votre temps.

Réponse acceptée

J'ai consulté les sources EF7 et il semble que vous soyez correct avec votre approche actuelle.

La chaîne de connexion est stockée dans SqlServerOptionsExtension . Lorsque vous appelez UseSqlServer(connectionString) le code est le suivant (extrait uniquement les lignes intéressantes):

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

Je ne suis pas sûr de savoir pourquoi la chaîne de connexion a été supprimée d'un endroit évident, mais il se peut que devs ait résumé la chaîne de connexion pour nous permettre d'utiliser des bases de données non standard (comme une base de données en mémoire, etc.).

Cela semble beaucoup plus clair OMI:

Configuration.Get("Data:ConnectionString")

Réponse populaire

Si vous avez un contexte entièrement matérialisé, vous pouvez également utiliser ceci:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi