2012-09-04 19 views
7

Sto utilizzando EF 4.3 con un primo approccio al codice.Entity Framework 4.3 codice prima denominazione del database

Con EF 4.3, si consiglia di utilizzare la nuova sezione di configurazione <entityFramework /> per inizializzare la stringa di connessione per un contesto.

Ho effettuato alcune ricerche online e non riesco a trovare un modo conveniente per utilizzare questo metodo per inizializzare una connessione con un nome di database configurabile.

Ad esempio, diciamo che ho un'entità MyDBContext nella mia applicazione. lo voglio utilizzare il nome del database specificato nella stringa di connessione da Initial Catalog=MyDB;

Utilizzando il vecchio metodo da EF 4.1, posso fare questo non è un problema aggiungendo la stringa di connessione alla sezione <connectionstring> nel file di configurazione.

<add name="MyDBContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> 

Se voglio usare il configsection più recente che EF 4.3 supporti, non ho modo di specificare un nome di database nella stringa di connessione. Ho provato quanto segue ma la proprietà Initial Catalog viene ignorata. Credo che viene ignorato per una buona ragione, perché il tutto è un DefaultConnectionFactory che potrebbe essere utilizzato da più contesti nella mia applicazione

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

Il nome DB di default che il mio approccio codefirst crea come conseguenza dell'utilizzo di questo è MyNamespace.MyDBContext

Comprendo che esiste un modo per sovrascrivere questa denominazione predefinita passando un valore all'argomento nameOrConnectionString sull'oggetto base DBContext.

Così ho potuto fare qualcosa di simile:

public MyDBContext() : base("MyDB") { } 

Tuttavia, se prendo questo approccio finisco hardcoding nomi DB nella mia applicazione e personalmente non mi piace questo.

Mi chiedo se è possibile passare un nome di database per il mio contesto DB comodamente dal file Web.config o devo semplicemente continuare a utilizzare la sezione <connectionstrings>?

risposta

0

Quanto spesso si ritiene che il nome del database debba essere modificato?

Detto questo, non mi sono imbattuto in questo problema da solo (sto bene codificando a fondo il nome del database - non dovrebbe cambiare) un'opzione potrebbe essere quella di memorizzare il nome del database che si desidera in Web.config come impostazione dell'applicazione, quindi il tuo codice ricava il valore da lì.

EDIT: Si potrebbe anche voler dare un'occhiata a http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx:

public UnicornsContext() 
    : base("name=UnicornsCEDatabase") 
{ 
} 

Con che tirando la stringa di connessione con quel particolare nome:

<configuration> 
<connectionStrings> 
    <add name="UnicornsCEDatabase" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="Data Source=Unicorns.sdf"/> 
</connectionStrings> 
</configuration> 

Secondo http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx questo dovrebbe ancora funzionare in 4.3.

+1

In genere non mi aspetto che il nome del DB cambi. Ma potrebbero esserci casi in cui il nome del DB potrebbe collidere con un altro nome di DB sulla stessa istanza SQL.C'è anche il caso se voglio eseguire più di una istanza della stessa applicazione sulla stessa istanza SQL, non può essere eseguita senza la ricompilazione dell'applicazione e la modifica del nome del DB. Non ideale –

+0

Quindi vorrei dare un'occhiata a una delle due opzioni sopra. Personalmente, sembra che l'idea del blog di ADO.NET sia la migliore opzione dei due. –

+0

Grazie, credo che rimarrò con la chiave connectiontring nel file Web.config come da articolo di riferimento. –

Problemi correlati