更改POCO类名称而不会导致大量迁移

时间:2013-03-14 10:05:49

标签: c# entity-framework ef-code-first code-first ef-migrations

以下是我们继承的实体的示例:

[Table("Vehicles")]
public partial class Car
{
    [Key]
    public int Id { get; set; }

    [Required]
    public Make Make { get; set; }

    [Required]
    public Model Model { get; set; }
}

我们想重构我们的代码以重命名此表“Vehicle”。我们可以更改[Table]属性以生成执行RenameTable(name: "dbo.Cars", newName: "Vehicles")的迁移文件,一切都很好。

但是,如果我们尝试更改类名,迁移脚手架会尝试创建,然后删除同一个表。这是一个例子:

public override void Up()
{
    DropForeignKey("dbo.Vehicles", "Make_Id", "dbo.Makes");
    DropForeignKey("dbo.Vehicles", "Model_Id", "dbo.Models");
    DropIndex("dbo.Vehicles", new[] { "Make_Id" });
    DropIndex("dbo.Vehicles", new[] { "Model_Id" });
    CreateTable(
        "dbo.Vehicles",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Make_Id = c.Int(nullable: false),
                Model_Id = c.Int(nullable: false),
            })
        .PrimaryKey(t => t.Id)
        .ForeignKey("dbo.Makes", t => t.Make_Id)
        .ForeignKey("dbo.Models", t => t.Model_Id)
        .Index(t => t.Make_Id)
        .Index(t => t.Model_Id);

    DropTable("dbo.Vehicles");
}

有没有办法只在代码中更改类名(保持[Table]属性相同),而不会导致这种行为?或者这只是我不应该做的事情?

1 个答案:

答案 0 :(得分:2)

您不必在生成时使用迁移。它试图了解你所改变的内容并创建适合你工作的迁移,但显然在这种情况下算法很混乱。

您只需更改迁移即可执行RenameTable方法。这应该有用。

永远不要,请在http://entityframework.codeplex.com

向EF小组提交错误报告