假设我们有一个Web应用程序的架构模型,每个帐户都有1个数据库。这些帐户的数据库结构相同,只有其中的数据不同。如何在Code First模型中配置迁移。
假设我们有一个Web应用程序的架构模型,每个帐户都有1个数据库。这些帐户的数据库结构相同,只有其中的数据不同。如何在Code First模型中配置迁移。
var migration_config = new Configuration();
migration_config.TargetDatabase = new DbConnectionInfo("BlogContext");
var migrator = new DbMigrator(migration_config);
migrator.Update();
migration_config.TargetDatabase = new DbConnectionInfo("BlogContextCopy");
migrator = new DbMigrator(migration_config);
migrator.Update();
在 app_config 文件中的连接字符串示例:
<connectionStrings>
<add name="BlogContext" providerName="System.Data.SqlClient" connectionString="Server=(localdb)\v11.0;Database=MigrationsDemo.BlogContext;Integrated Security=True;"/>
<add name="BlogContextCopy" providerName="System.Data.SqlClient" connectionString="Server=(localdb)\v11.0;Database=MigrationsDemo.BlogContextCopy;Integrated Security=True;"/>
</connectionStrings>
配置类和上下文:
internal sealed class Configuration : DbMigrationsConfiguration<MigrationsDemo.BlogContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(MigrationsDemo.BlogContext context) {
}
}
public class BlogContext : DbContext {
public BlogContext() {}
public BlogContext(string connection_name) : base(connection_name) {
}
public DbSet<Blog> Blogs { get; set; }
}
clients.json
文件内容:{
"DatabaseA": "DatabaseAConnectionString",
"DatabaseB": "DatabaseBConnectionString",
"DatabaseC": "DatabaseCConnectionString",
...
}
public static void MigrateDatabases(IDictionary<string,string> databaseConfigs)
{
foreach (var db in databaseConfigs)
{
var config = new Configuration
{
TargetDatabase = new DbConnectionInfo(db.Value, "System.Data.SqlClient")
};
var migrator = new DbMigrator(config);
migrator.Update();
}
}
然后在启动过程中(我使用OWIN,所以在我的Startup.cs
文件中,也可以是global.asax.cs
文件):
string json;
var path = HttpRuntime.AppDomainAppPath;
using (var reader = new StreamReader(path + @"Config\clients.json"))
{
json = reader.ReadToEnd();
}
var databases = JsonConvert.DeserializeObject<IDictionary<string, string>>(json);
MigrateDatabases(databases);
请查看应用程序启动期间自动迁移页面。
如果您使用此方法应用迁移,您可以使用任何连接字符串(或其他方法来准确标识要连接的数据库),并在连接时执行迁移。