2016-02-12 4 views
5

konnte keine Verbindungszeichenfolge mit dem Namen MyEntity gefunden werden. Unser ASP.NET 5/MVC 6-Projekt greift über eine Business-Schichten-Assembly auf unsere Datenbank zu. Datenbank Erste) Assembly. Der MVC 6-Code explodiert, wenn versucht wird, den Business-Layer-Code auszuführen, der den DbContext verwendet, um mit einem Fehler auf die Datenbank zuzugreifen: In der Anwendungskonfigurationsdatei konnte keine Verbindungszeichenfolge mit dem Namen "MyEntity" gefunden werden. Ich habe versucht, die MyEntity-Verbindungszeichenfolge im MVC-Projekt config.json, appsettings.json auf verschiedene Weisen ohne Glück zu definieren.ASP.NET 5/MVC 6 Database First - In der Konfigurationsdatei der Anwendung

Bei der Ausführung von Business-Schicht-Methoden aus einem Tester-Projekt, wo ich die erwartete app.config-Datei mit der Syntax der Verbindungszeichenfolge wie unten, funktioniert es kein Problem.

Hinweis Diese Frage auch angepasst, wie könnte wie eine MVC 5 bis MVC 6 app migrieren, wo die MVC 5 app lose DB Zugriff auf DAL-Schicht und der MVC-Code gekoppelt hatte keine Kenntnis von EF und lieferte nur die Verbindungszeichenfolge web.config, die vom DbContext-Objekt in DAL benötigt wird?

Jede Hilfe wäre willkommen, lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Config-Datei Syntax in Testern Projekt:

<add name="MyEntity" 

connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" /> 

wahrscheinlich falsche Syntax in config.json Datei.

{ 
    "Data": { 

"defaultConnection": { 

"connectionString": "metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    }, 

"entityFramework": { 

"MyEntity": { 

"ConnectionString": "name=data:defaultConnection:connectionString" 
     } 
    } 
    } 
} 
+0

Wie sieht Ihr Startup.cs aus? Wie wird der Datenbankkontext erstellt? –

Antwort

1

Wie wird der Datenbankkontext erstellt?

Migrate Configuration Settings from web.config

Die Verbindungszeichenfolge in appsettings.json

{ 
    "Data": { 
     "DefaultConnection": { 
      "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;" 
     } 
    } 
} 

bearbeiten sein können Sie Ihre Verbindungszeichenfolge wie folgt zu erreichen:

string connection = Configuration.Get<string>("Data:DefaultConnection:ConnectionString"); 
+0

Der Datenbankkontext wurde über den ADO.NET Entity Data Model Assistenten, EF Designer aus der Datenbank (existierende Datenbank) erstellt ... Ja, ich habe viele Varianten wie die Seite, die Sie erwähnt haben, ohne Glück versucht. [Konfigurationseinstellungen aus web.config migrieren] (http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingconfig.html#migrate-configuration-settings-from-web-config) – Dave

+0

Are Übergeben Sie Ihre Verbindungszeichenfolge an die Bibliothek oder erwarten Sie, dass die Bibliothek sie automatisch abruft? Sehen Sie meine Bearbeitung, wie Sie Ihre Verbindungszeichenfolge erhalten. –

0

Vielen Dank Rami für Ihre hilfreichen Hinweise, ich war tatsächlich auf EF angewiesen, die Verbindungszeichenfolge automatica abzurufen lly. Dies funktionierte gut für MVC 5 (und Vorgängerversionen), die mit dem Database First-Modell ausgeführt wurden, wo wir den erwarteten DB-Verbindungsnamen angeben konnten, aber mit MVC 6 muss die Verbindungszeichenfolge explizit übergeben werden.

Ich fügte den zusätzlichen ctor hinzu, der die Verbindungszeichenfolge in seiner eigenen partiellen Klassendatei nimmt, da wir Datenbank zuerst machen und die Kontextdatei mit aufeinanderfolgenden Modellaktualisierungen von DB überschrieben wird. Das heißt, dass in einer separaten partiellen Klasse/Datei ein neuer ctor beibehalten wird, um nicht überschrieben zu werden.

0

Angeben der Verbindung in config.json funktionierte nicht für mich. Wir müssen die Verbindungszeichenfolge aus der app.config-Datei in den Code verschieben. Dies kann in der Datei context.cs erfolgen. Im Konstruktor müssen Sie die Verbindungszeichenfolge

public partial class ProducerCentralEntities : DbContext 
    { 
     public ProducerCentralEntities() 
     : base(@"metadata = res://*/TestProj.csdl|res://*/TestProj.ssdl|res://*/TestProj.msl;provider=System.Data.SqlClient;provider connection string=';data source=serverName;initial catalog=databaseName;integrated security=True;MultipleActiveResultSets=True;application name=EntityFramework';") 
     { 
     } 
     } 

Hinweis angeben: 1) Sie sollten vollständige Verbindungszeichenfolge 2) Ersetzen Zitat " mit '

1

haben eine Klasse in Daten hinzufügen Schicht als

public class ConfigHelper 
{ 

    public static string ConnectionString { get; set; } 

    public ConfigHelper(string conn) 
    { 
     ConnectionString = conn; 

    } 
} 

dann in startup.cs

var connectionString = Configuration["Data:"Connectionstring name":ConnectionString"]; 
ConfigHelper.ConnectionString = connectionString; 

jetzt in

public partial class Context : DbContext 
{ 
    public Context() 
     : base(ConfigHelper.ConnectionString) 
    { 
    } 
} 

auch wird ein weiterer Ansatz, Dependency Injection werden.

0

Geben Sie die Verbindungszeichenfolge in die Datei app.config ein.

Verwandte Themen