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>
?
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 –
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. –
Grazie, credo che rimarrò con la chiave connectiontring nel file Web.config come da articolo di riferimento. –