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 に答える