0

这是我们继承的实体的示例:

[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]属性相同),而不会导致这种行为?或者这只是我不应该做的事情?

4

1 回答 1

2

您不必使用正在生成的迁移。它试图了解您所做的更改并创建适合您工作的迁移,但显然在这种情况下算法会混淆。

您可以更改迁移以执行该RenameTable方法。这应该有效。

不过,请通过http://entityframework.codeplex.com向 EF 团队提交错误报告

于 2013-03-14T10:13:26.413 回答