如何迁移数据库没有的NuGet? 这是不可能使用Visual Studio在生产环境中的NuGet。 目前,许多例子只是教我们使用Visual Studio中的NuGet。 如何使用生成的DbMigration类?
Answer 1:
最简单的方法是:
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<MyDbContext,
MyDbMigrationsConfiguration>());
这将初始化的DbContext运行时的迁移。
您也可以手动强制执行:
var migrator = new DbMigrator(new MyMigrationsConfiguration());
migrator.Update();
(我相信你也必须设置TargetDatabase
上的配置,但你可以试试)
Answer 2:
下面是选项:
- 使用migrate.exe命令行工具,船舶在我们的NuGet包。
- 正如其他人所描述使用MigrateDatabaseToLatestVersion初始化。
- 使用可从DbMigrator类的运行时API。
Answer 3:
您可以使用一个Web.config设置迁移到最新版本-见由罗恩·米勒这篇博客文章 :
如果您使用的Code First迁移,你可以配置数据库使用MigrateDatabaseToLatestVersion初始化将被自动迁移。
<contexts>
<context type="Blogging.BlogContext, MyAssembly">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Blogging.BlogContext,
MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework" />
</context>
</contexts>
只是交换在这里你的上下文类:在System.Data.Entity.MigrateDatabaseToLatestVersion是内置于EF。 此设置更新了同样的想法的老版本的AppSettings。
在我看来,这是最好的方法,因为它初始化器使用的问题是配置一个真正的,并且要能够处理web.config这一点,最好申请配置转变为您不同的环境下工作。
Answer 4:
您可以使用EF电动工具做到这一点,还有的migrate.exe程序,您可以使用运行在命令提示符下迁移(交建为例)。 如果你想运行在生产数据库迁移,您还可以使用Update-Database命令从迁移类生成的SQL脚本,是非常有用的,如果你需要通过一个DBA。
EF电动工具都可以在Visual Studio库和可选这里 ,看看这个非常有用的视频 ,除其他事项外,有关Update-Database命令会谈。
Answer 5:
还有另一种解决方案:
Using DB = New SHAContext()
If DB.Database.Exists() Then
Dim migrator As New DbMigrator(New SHAClassLibrary.Migrations.Configuration())
For Each m In migrator.GetDatabaseMigrations()
Try
migrator.Update(m)
Catch ex As Exception
End Try
Next
End If
'DB.test()
End Using
Answer 6:
我一直在寻找一种方式来控制哪些迁移代码中显式运行,而无需启用DbConfiguration类或自动迁移。
所以我设法创建以下扩展名:
public static void RunMigration(this DbContext context, DbMigration migration)
{
var prop = migration.GetType().GetProperty("Operations", BindingFlags.NonPublic | BindingFlags.Instance);
if (prop != null)
{
IEnumerable<MigrationOperation> operations = prop.GetValue(migration) as IEnumerable<MigrationOperation>;
var generator = new SqlServerMigrationSqlGenerator();
var statements = generator.Generate(operations, "2008");
foreach (MigrationStatement item in statements)
context.Database.ExecuteSqlCommand(item.Sql);
}
}
作为一个例子,具有如下所示的迁移:
public class CreateIndexOnContactCodeMigration : DbMigration
{
public override void Up()
{
this.CreateIndex("Contacts", "Code");
}
public override void Down()
{
base.Down();
this.DropIndex("Contacts", "Code");
}
}
你可以用你的DbContext运行:
using (var dbCrm = new CrmDbContext(connectionString))
{
var migration = new CreateIndexOnContactCodeMigration();
migration.Up();
dbCrm.RunMigration(migration);
}
文章来源: EF Code First DbMigration without nuget