我正在开发一个asp.net mvc项目。我想知道如何在应用程序设置期间(通过客户端本身)更改/切换数据库与新数据库,而无需在新数据库上手动运行迁移。
我想更改连接字符串中的数据库名称,就是这样。我的项目应该配置好并适用于新数据库。
请提出解决方案。
答案 0 :(得分:1)
你可以设置" MigrateDatabaseToLatestVersion"在配置文件中:
internal sealed class Configuration : System.Data.Entity.MigrateDatabaseToLatestVersion<DbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
//..................
}
protected override void Seed(DbContext context)
{
///....
}
}
<强>更新强>
您可以在global.asax文件中设置Database.SetInitializer:
protected void Application_Start()
{
....
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
}
答案 1 :(得分:1)
如Iraj所述,有一个数据库初始化程序,您可以使用它在启动期间使用更改的数据库设置迁移:
Database.SetInitializer<ObjectContext>(
new MigrateDatabaseToLatestVersion<ObjectContext, Configuration>());
另一种方法:
var Configuration = new DbContextConfiguration();
Configuration.TargetDatabase = new DbConnectionInfo(
database.ConnectionString, database.ProviderName);
var MyMigrator = new DbMigrator(configuration);
MyMigrator.Update();
MyMigrator.GetPendingMigrations(); ' Optional
您还可以创建一个设置页面,该页面可以将数据库名称(或完整的连接字符串)作为客户端的输入,您可以使用它在运行应用程序时通过代码运行迁移。瞧!
参考 - http://romiller.com/2012/02/09/running-scripting-migrations-from-code/
[更新] 一个小技巧,您可以使用Entity Framework迁移功能进行开发,一旦完成实体和所有内容的完成,您只需删除迁移文件并从应用程序中删除它的钩子并与客户端/用户共享。 然后,默认情况下,实体框架将创建新数据库,或者将使用项目实体更新任何现有数据库。 您可以使用默认的asp.net web api模板进行相同的检查。在创建新项目时,如果您选择asp.net身份进行身份验证,则它包含几个在第一次运行应用程序时自动创建的实体。