以下是我们继承的实体的示例:
[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]
属性相同),而不会导致这种行为?或者这只是我不应该做的事情?
答案 0 :(得分:2)
您不必在生成时使用迁移。它试图了解你所改变的内容并创建适合你工作的迁移,但显然在这种情况下算法很混乱。
您只需更改迁移即可执行RenameTable
方法。这应该有用。