Wie bekomme ich ConnectionString von EF7 DbContext?

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

Frage

Mein Szenario:

Ich verwende EF7 für Standard-CRUD-Operationen und Dapper für komplexere Abfragen, die eine höhere Geschwindigkeit erfordern. Von Startup.cs Ich injiziere meinen DbContext in meine DAL, die dann offensichtlich die Datenbankabfragen durchführt. Dapper benötigt eine Verbindungszeichenfolge. Ich möchte meine EF7 DbContext-Verbindungszeichenfolge in die Dapper-Abfrage einfügen.

Meine Frage:

Wie bekomme ich die Verbindungszeichenfolge vom DbContext wie zuvor: DbContext.Database.Connection ?

Es wurde von Database zu DatabaseFacade in EF7 geändert, und damit wurde DbConnection Connection ebenfalls entfernt.

Sicherlich sollte es im DbContext eine persistente Verbindungszeichenfolge DbContext , die ich abfragen kann?

Meine Forschung:

Die Methode, die ich im Moment benutze, ist und es funktioniert:

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

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

Ich weiß es noch in der Beta, aber vermisse ich etwas?

Vielen Dank für Ihre Zeit.

Akzeptierte Antwort

Ich habe EF7- Quellen durchsucht und es scheint, dass Sie mit Ihrem aktuellen Ansatz richtig liegen.

Verbindungszeichenfolge wird in SqlServerOptionsExtension gespeichert. Wenn Sie UseSqlServer(connectionString) aufrufen, UseSqlServer(connectionString) der Code wie folgt (nur interessante Zeilen extrahiert):

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

Ich bin mir nicht sicher, warum Verbindungszeichenfolge von offensichtlichem Ort entfernt wurde, aber es könnte sein, dass Devs die Verbindungszeichenfolge abstrahiert hat, um uns zu ermöglichen, nicht standardisierte Datenbanken zu verwenden (wie In-Memory-Datenbank usw.).

Das sieht viel klarer aus IMO:

Configuration.Get("Data:ConnectionString")

Beliebte Antwort

Wenn Sie einen vollständig materialisierten Kontext haben, können Sie auch Folgendes verwenden:

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum