Wie übergebe ich eine Verbindungszeichenfolge an den Code-First-DbContext des Entity Frameworks? Meine Datenbankgenerierung funktioniert ordnungsgemäß, wenn sich sowohl DbContext als auch die Verbindungszeichenfolge in web.config im selben Projekt befinden und denselben Namen haben. Aber jetzt muss ich den DbContext in ein anderes Projekt verschieben, damit ich eine Übergabe einer Verbindungszeichenfolge wie folgt teste:
Modell & 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.Config
<connectionStrings>
<add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Wenn ich in der Aktion einen Haltepunkt setze und die analysiere db
, ist die Verbindungszeichenfolge vorhanden, aber die Datenbank oder etwas anderes 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 zugänglich. 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)
quelle
Antworten:
Ein bisschen spät zum Spiel hier, aber eine andere Option ist:
quelle
Manual changes to this file will be overwritten if the code is regenerated.
in der Kopfzeile enthalten ist, möchten Sie dies möglicherweise in einerNach dem Lesen der Dokumente muss ich stattdessen den Namen der Verbindungszeichenfolge übergeben:
quelle
Ich dachte, ich würde dieses Bit für Leute hinzufügen, die nach "So übergeben Sie eine Verbindungszeichenfolge an einen DbContext" suchen: Sie können eine Verbindungszeichenfolge für Ihren zugrunde liegenden Datenspeicher erstellen und die gesamte Verbindungszeichenfolge an den von DbContext abgeleiteten Konstruktor Ihres Typs übergeben .
(Wiederverwendung von Code aus @Lol Coder) Modell & Kontext
Angenommen, Sie erstellen eine SQL-Verbindungszeichenfolge mit dem SqlConnectioStringBuilder wie folgt:
Wenn die GetConnectionString-Methode die entsprechende Verbindungszeichenfolge erstellt und der SqlConnectionStringBuilder sicherstellt, dass die Verbindungszeichenfolge syntaktisch korrekt ist; Sie können dann Ihren Datenbankkontext wie folgt instanziieren:
quelle
public TestAppContext() : base("Data Source=server.company.com;Initial Catalog=SomeDB;Integrated Security=True") { }
Erstellen Sie in Ihrem DbContext einen Standardkonstruktor für Ihren DbContext und erben Sie die Basis wie folgt:
quelle
MyConnectionString
... erstellt (ja, die Verbindungszeichenfolge ist vorhanden). Ich muss setzenname=MyConnectionString
.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.
quelle
Ich habe ein kleines Lösungsbeispiel für dieses Problem.
MyDBContext.cs
MyClass.cs
frmMyForm.cs
quelle
Ü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"
quelle
Bei Verwendung eines EF-Modells habe ich in jedem Projekt eine Verbindungszeichenfolge, die das EF-Modell verwendet. Zum Beispiel habe ich ein EF EDMX-Modell in einer separaten Klassenbibliothek. Ich habe eine Verbindungszeichenfolge in meinem Webprojekt (mvc), damit es auf die EF-Datenbank zugreifen kann.
Ich habe auch ein anderes Unit-Test-Projekt zum Testen der Repositories. Damit die Repositorys auf die EF-Datenbank zugreifen können, hat die Datei app.config des Testprojekts dieselbe Verbindungszeichenfolge.
DB-Verbindungen sollten konfiguriert, nicht codiert, IMO.
quelle
Ich kann SqlExpress nicht verwenden und es funktioniert einwandfrei, wenn ich eine Verbindungszeichenfolge im Konstruktor verwende.
Sie haben in Ihrem Projekt einen App_Data-Ordner erstellt, oder?
quelle
Für alle, die hierher gekommen sind und versucht haben, herauszufinden, wie die Verbindungszeichenfolge dinamisch eingestellt werden kann, und Probleme mit den oben genannten Lösungen (wie "Format der Initialisierungszeichenfolge entspricht nicht der Spezifikation ab Index 0") beim Einrichten der Verbindungszeichenfolge in der Konstrukteur. So beheben Sie das Problem:
quelle
von hier
Beachten Sie, dass Sie möglicherweise hinzufügen müssen
Microsoft.EntityFrameworkCore.SqlServer
quelle