2009-05-13 15 views
7

Utilizzo un'architettura a livelli con Entity Framework come datalayer con un gruppo di repository in cima che contengono le query Linq-To-Entities. Il livello dati è un progetto, accanto al quale ho un livello Servizi e l'interfaccia, che è un sito web.Entity Framework - layered design - Dove mettere il connectiontring?

Desidero che il mio sito web sia responsabile della specifica del connectiontring per il mio modello di entità. Come faccio a fare questo?

Sto utilizzando un metodo singleton per accedere al mio repository di entità, che si trova all'interno del datalayer.

Grazie

risposta

9

È possibile copiare la stringa di connessione creata in App.Config dell'assieme DAL nella sezione connectionStrings di web.config.

È possibile mantenere la stringa di connessione nella DLL di assembly ma non è necessario distribuirla con il sito Web.

Sarà necessario copiare l'intera stringa di connessione. Esso dovrebbe essere simile a questo:

<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

Esso deve contenere tutte le informazioni su dove sono presenti i file di mapping.

+0

Ho ricreato il mio modello di entità e ho provato di nuovo e ora funziona, grazie !!! – Peter

3

Nel mio caso, anche se io sto usando L2S invece di L2E, ma la raccomandazione dovrebbe stare. Ho una libreria di configurazione generale che alimenta da un file XML. Quando è richiesto un contesto di dati, ogni oggetto dati ha un metodo simile al seguente. Certo, potrebbe essere abbastanza facile, se si preferisce.

private static string _conStr = null; 
private static CalendarsAndListsDataContext GetDataContext() 
{ 
    if (_conStr == null) 
    { 
     _conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString"); 
    } 

    return new CalendarsAndListsDataContext(_conStr); 
} 

Ora, più grande svantaggio è la connessione cambiamenti stringa richiedono un riavvio dell'applicazione, ma nel mio caso, che non è un problema.

+0

Mi piace l'idea di come si separa la configurazione in un progetto aggiuntivo. Ma per questa applicazione voglio che il mio sito web sia responsabile della connessione. – Peter

+0

Bene, non vi è alcun motivo per cui il proprio livello di configurazione debba essere letto solo. Potresti farlo leggere/scrivere, quindi potresti fare qualcosa come COnfigurationLibrary.Config.AddSetting ("ConnectionString", "MyString"). Quindi il tuo sito web potrebbe ancora guidare la stringa di connessione. – Serapth