Frage Übergeben Sie die Verbindungszeichenfolge an Code-First DbContext


Wie übermittle ich eine Verbindungszeichenfolge an den Code-First DbContext des Entitätsframeworks? Meine Datenbankgenerierung funktioniert ordnungsgemäß, wenn sich sowohl DbContext als auch die Verbindungszeichenfolge in web.config im selben Projekt befinden und auf die gleiche Weise benannt sind. Aber jetzt muss ich den DbContext in ein anderes Projekt verschieben, also teste ich wie folgt eine Verbindungszeichenfolge:

Modell und Kontext

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

Aktion

    public ActionResult Index()
    {
        var db = new NerdDinners(ConfigurationManager.ConnectionStrings["NerdDinnerDb"].ConnectionString);

        var dinners = (from d in db.Dinners
                      select d).ToList();
        return View(dinners);
    }

Web.Konfig

<connectionStrings>
  <add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>    
</connectionStrings>

Wenn ich einen Haltepunkt in der Aktion setze und den db, die Verbindungszeichenfolge ist vorhanden, aber die Datenbank wird nicht erstellt oder gefunden.

Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden)


67
2018-01-26 13:30


Ursprung


Antworten:


Ein bisschen spät zum Spiel hier, aber eine andere Option ist:

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
    {
        this.Database.Connection.ConnectionString = connString;
    }
    public DbSet<Dinner> Dinners { get; set; }
}

68
2017-08-14 20:15



Nach dem Lesen der Dokumente muss ich stattdessen den Namen der Verbindungszeichenfolge übergeben:

var db = new NerdDinners("NerdDinnerDb");

55
2018-01-26 16:19



Ich dachte, ich würde dieses Bit für Leute hinzufügen, die nach "Wie übergebe ich eine Verbindungszeichenfolge an einen DbContext": Sie können eine Verbindungszeichenfolge für den zugrunde liegenden Datenspeicher erstellen und die gesamte Verbindungszeichenfolge an den Konstruktor Ihres von DbContext abgeleiteten Typs übergeben .

(Wiederverwendung des Codes von @Lol Coder) Modell und Kontext

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

Angenommen, Sie erstellen eine SQL-Verbindungszeichenfolge mit dem SqlConnectioStringBuilder wie folgt:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());

Wenn die GetConnectionString-Methode die entsprechende Verbindungszeichenfolge erstellt und SqlConnectionStringBuilder sicherstellt, dass die Verbindungszeichenfolge syntaktisch korrekt ist, Sie können dann Ihr db conetxt wie folgt instanziieren:

var myContext = new NerdDinners(builder.ToString());

36
2017-10-03 09:29



Erstellen Sie in Ihrem DbContext einen Standardkonstruktor für Ihren DbContext und erben Sie die Basis wie folgt:

    public myDbContext()
        : base("MyConnectionString")  // connectionstring name define in your web.config
    {
    }

23
2017-11-09 04:50



Überprüfen Sie die Syntax Ihrer Verbindungszeichenfolge in der Datei web.config. Es sollte so etwas wie sein ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"


1
2018-01-26 13:38



Bei Verwendung eines EF-Modells habe ich in jedem Projekt, das das EF-Modell verwendet, eine Verbindungszeichenfolge. Zum Beispiel habe ich ein EF EDMX-Modell in einer separaten Klassenbibliothek. Ich habe eine Verbindungszeichenfolge in meinem Web (Mvc) Projekt, so dass es auf die EF db zugreifen kann.

Ich habe auch ein anderes Unit-Test-Projekt zum Testen der Repositories. Damit die Repositorys auf die EF-Datenbank zugreifen können, verfügt die Datei app.config des Testprojekts über dieselbe Verbindungszeichenfolge.

DB-Verbindungen sollten konfiguriert, nicht codiert, IMO sein.


1
2018-01-26 13:38



Wenn Sie die Verbindungszeichenfolge in der App erstellen, verwenden Sie den Befehl connString. Wenn Sie eine Verbindungszeichenfolge in der Webkonfiguration verwenden. Dann verwenden Sie den "Namen" dieser Zeichenfolge.


1
2017-09-30 14:41



Ich sehe nichts falsch mit Ihrem Code, ich benutze SqlExpress und es funktioniert gut, wenn ich eine Verbindungszeichenfolge im Konstruktor verwende.

Sie haben in Ihrem Projekt einen App_Data-Ordner erstellt, nicht wahr?


0
2018-01-26 14:35