0
对DBMigrations有点困惑我有一个项目,我创建并启用了Migrations。它用4.3创建的,所以我认为它是最新的。我在执行更新的上下文的构造函数中有一些代码(请参阅下面的代码),并且每次添加类似可空字符串列的东西时都会工作,或者做一些不会以非一致方式更改数据库的东西。我的场景是我改变了我的模型,当我观察sql trace时,它会自动为我执行alter列。使用Code First和EF
我的问题是我想要做的“向上”和“向下”的方法,但我在运行时间上的困惑。也就是说,我现在在版本1上,我在“up”方法中添加了一些代码来添加一个列,然后稍后当我想要版本3时,它如何知道要调用哪个“up”方法?
困惑。 -Peter
namespace MigrationsAutomaticDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddBlogRating : DbMigration
{
public override void Up()
{
AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
}
public override void Down()
{
DropColumn("Blogs", "Rating");
}
}
}
,
public SiteDB()
{
UpdateDatabase();
}
// http://joshmouch.wordpress.com/2012/04/22/entity-framework-code-first-migrations-executing-migrations-using-code-not-powershell-commands/
public static int IsMigrating = 0;
private static void UpdateDatabase()
{
if (0 == Interlocked.Exchange(ref IsMigrating, 1))
{
// Manually creating configuration:
var migratorConfig = new DbMigrationsConfiguration<SiteDB>();
migratorConfig.AutomaticMigrationsEnabled = true;
// Using configuration defined in project:
//var migratorConfig = new DbMigrationsConfiguration();
// 3
//var dbMigrator = new DbMigrator(new Settings());
var dbMigrator = new DbMigrator(migratorConfig);
dbMigrator.Update();
Interlocked.Exchange(ref IsMigrating, 0);
}
}
我还是没有看到我为每一步放置不同的UP和DOWN的位置。也就是说,我可能需要在每个步骤上执行我自己的SQL以使迁移工作。比如设置外键以正确填写已填充数据的值。 – 2012-04-25 14:15:10
嗨,彼得,你需要为每一步生成每个迁移。 例如: 的201204250656061_AddBlogRatingVersion2是添加评分和VisitCount柱。 201204250656061_AddBlogRatingVersion3用于添加LastVisited和LastUpdated列。 迁移目标是受刀具[包管理控制台]生成的ID(http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code- based-migrations-walkthrough.aspx) – 2012-04-26 03:29:11
对不起,我很困惑,但我仍然感到困惑。如果有更新无法自动生成,那么我该如何对这些更新进行编码,以使它们能够保持某个版本的升级或版本降低?另外,你是否必须为此使用包管理器? – 2012-04-26 07:23:30