2

プロジェクトのデータ移行を行っています。しかし、たとえば、1 つの質問があります。次のフィールドを持つ Book テーブルがあります。

ID  Name   Color

1   Java    red

2   MVC     blue

3   .Net    blue

Code First 技術を使用して、フィールドの名前を「Color」から「BookColor」に変更しようとしました。しかし、移行後、テーブルは次のようになりました。

ID  Name   BookColor

1   Java    null

2   MVC     null

3   .Net    null

フィールド値を失いました。すべての値が転送されたことを確認するにはどうすればよいですか?

MVC3 で Entity Framework を使用しています

EDITこれは私のDBMigrationクラスです:

public partial class AddCreative : DbMigration
{

    public override void Up()
    {
        AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
        DropColumn("Authors", "Name");
    }


    public override void Down()
    {
        AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
        DropColumn("Authors", "Names");
    }
}

変更後 に変更NameしましNames た (名前フィールドのデータを失いました)。

4

2 に答える 2

6

以下を使用しても問題ありませんでした。

まず、移行をセットアップします。

PM> Enable-Migrations
PM> Add-Migration RenameBookColorColumn

次に、移行クラスをセットアップして、名前の変更を実行します。

public class RenameBookColorColumn : DbMigration
{
    public override void Up()
    {
        this.RenameColumn("Books", "Color", "BookColor");
    }
    public override void Down()
    {
        this.RenameColumn("Books", "BookColor", "Color");
    }
}

次に、Update-Database変更を実行できるように呼び出します。

PM> Update-Database -Verbose
Using NuGet project 'Example'.
Using StartUp project 'ExampleTest'.
Target database is: 'ExampleContext' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
Applying explicit migrations: [201207051400010_RenameBookColorColumn].
Applying explicit migration: 201207051400010_RenameBookColorColumn.
EXECUTE sp_rename @objname = N'Books.Color', @newname = N'BookColor',
@objtype = N'COLUMN' [Inserting migration history record]

ほら、名前が変更され、データが保持されます。

于 2012-07-05T14:27:08.417 に答える
1

次のコードを使用して、制限を回避できます。

public partial class AddCreative : DbMigration
{
    public override void Up()
    {
        AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
        Sql("UPDATE [Authors] SET [Names] = [Name]");
        DropColumn("Authors", "Name");
    }

    public override void Down()
    {
        AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
        Sql("UPDATE [Authors] SET [Name] = [Names]");
        DropColumn("Authors", "Names");
    }
}
于 2012-07-12T23:42:07.827 に答える