2016-02-12 14 views
5

Il nostro progetto ASP.NET 5/MVC 6 accede al nostro DB passando attraverso un assembly del livello aziendale e quindi verso il basso in DAL (Database First) assembly. Il codice MVC 6 esplode quando si tenta di eseguire il codice del livello aziendale che utilizza DbContext per accedere al DB con errore: Nessuna stringa di connessione denominata "MyEntity" potrebbe essere trovata nel file di configurazione dell'applicazione. Ho provato a definire la stringa di connessione MyEntity nel progetto MVC config.json, appsettings.json in vari modi senza fortuna.Database ASP.NET 5/MVC 6 - Nessuna stringa di connessione denominata MyEntity è stata trovata nel file di configurazione dell'applicazione

Se si eseguono i metodi del livello aziendale da un progetto tester in cui è presente il file app.config previsto con la sintassi della stringa di connessione come di seguito, non si verificano problemi.

Nota questione potrebbe anche essere riformulata come come migrare un MVC 5 MVC 6 app, dove l'applicazione MVC 5 debolmente accoppiati accesso DB strato DAL e il codice MVC non era a conoscenza di EF e solo fornito la stringa di connessione web.config necessaria per l'oggetto DbContext in DAL?

Qualsiasi aiuto sarebbe apprezzato, fatemi sapere se avete bisogno di ulteriori informazioni.

sintassi del file di configurazione nel progetto Tester:

<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" /> 

sintassi Probabile sbagliato nel file di config.json.

{ 
    "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

Che aspetto ha il tuo Startup.cs? Come viene creato il contesto del database? –

risposta

1

Come viene creato il contesto del database?

Migrate Configuration Settings from web.config

La stringa di connessione può essere in appsettings.json

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

Modifica È possibile ottenere la stringa di connessione come segue:

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

Il contesto del database è stato creato tramite la procedura guidata di Entity Data Model di ADO.NET, EF Designer dal database (DB esistente) ... Sì, ho provato molte varianti come il sito che hai citato senza fortuna. [Migra impostazioni di configurazione da web.config] (http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingconfig.html#migrate-configuration-settings-from-web-config) – Dave

+0

Are passare la stringa di connessione alla libreria o aspettarsi che la libreria la prelevi automaticamente? Vedi la mia modifica su come ottenere la stringa di connessione. –

0

Grazie mille per Rami i tuoi consigli utili, in effetti mi affido a EF per raccogliere la stringa di connessione automatica lly. Ciò ha funzionato correttamente per MVC 5 (e versioni precedenti) in esecuzione con il modello Database First in cui è possibile specificare il nome della connessione DB prevista, ma con MVC 6 sarà necessario passare esplicitamente la stringa di connessione.

Ho aggiunto il ctor aggiuntivo prendendo la stringa di connessione nel proprio file di classe parziale, poiché stiamo eseguendo Database First e il file di contesto viene sovrascritto con successivi aggiornamenti del modello da DB. L'avere in una classe/file parziale separata preserva il nuovo ctor da non essere sovrascritto.

0

Specificare la connessione in config.json non ha funzionato per me. Abbiamo bisogno di spostare la stringa di connessione dal file app.config al codice. Questo può essere fatto nel file context.cs. Nel costruttore è necessario specificare la stringa di connessione

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';") 
     { 
     } 
     } 

Nota: 1) Si dovrebbe avere stringa completa di connessione 2) Sostituire citazione " con '

1

Aggiungere una classe nei dati layer come

public class ConfigHelper 
{ 

    public static string ConnectionString { get; set; } 

    public ConfigHelper(string conn) 
    { 
     ConnectionString = conn; 

    } 
} 

Quindi in startup.cs

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

adesso

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

anche un altro approccio userà l'iniezione di dipendenza.

0

Inserire la stringa di connessione nel file app.config.

Problemi correlati