ciao andrea,
con ef6 è piuttosto semplice, il DbContext prende come parametro di costruttore un "string nameOrConnectionString", a cui è possibile passare 3 tipologie, di stringa:
- il nome del database es.: "MyDatabase"
- il nome della connection string (presa da app.config) es.: "name=MyDatabase"
- la connection string per esteso es.: "Data Source=|DataDirectory|mydb1.sdf;"
quando si passa semplicemente il nome del database, quest'ultimo prima cerca se esiste una connection string nell'app.config con lo stesso nome, se non esiste, utilizza il nome per creare automaticamente il file .sdf, mentre per forzare il fatto che la connection string esista nell'app.config devi usare la sintassi "name=miodb".
qui è spiegato in dettaglio: http://msdn.microsoft.com/en-us/data/jj592674
si fa prima a provarlo:
using System.Data.Entity;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
using (var db = new MyDbContext("mydb1"))
{
db.Database.Initialize(false);
}
}
}
public class Customer
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class MyDbContext : DbContext
{
public MyDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
}
public DbSet<Customer> Customers { get; set; }
}
}
la prima volta che lo lanci vedrai che nella bin ti verrà creato un file mydb1.sdf
se cambi in
MyDbContext("mydb2")
e rilanci, vedrai che ti crea un db nuovo mydb2.sdf
altrimenti puoi inserire le connection string per esteso nell'app.config:
<connectionStrings>
<add name="mydb1" connectionString="Data Source=|DataDirectory|mydb1.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
<add name="mydb2" connectionString="Data Source=|DataDirectory|mydb2.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
<add name="mydb3" connectionString="Data Source=|DataDirectory|mydb3.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
e utilizzarlo implicitamente:
MyDbContext("mydb3")
oppure esplicitamente:
MyDbContext("name=mydb3")
spero di avere risposto alla tua domanda, sostanzialmente se vuoi cambiare la connessione del db "al volo", non devi fare altro che istanziare il dbcontext con il db opportuno.
Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic