2016-12-06 10 views
1

私はクラス内の列の名前を変更しました。それはこのように見えました。EFの列の名前をコードファーストで変更します。

public class clsClassForStackoverflow 
{ 
    [Column(TypeName = "varchar"), StringLength(150)] 
    public string Name { get; set; } 

構造が変更されたため、名前を変更する必要がありました。だから私はその行を削除し、新しい特性を追加しました。その後、データベースの更新を準備するために新しい移行ファイルを作成し、ファイル内で古い列を削除して新しい列を追加する必要がありました。さて、私はデータベースにまだデータがあるので、名前を変更してドロップを変更しました。落ちると、それはなくなってしまうだろう。私は私のクラスに見て、propertieのdidntが変更されたデータベースの更新を起動した後

public partial class _100126_2 : DbMigration 
{ 
    public override void Up() 
    { 
     RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_Name", "ClassForStackoverflow_NewName"); 
    } 

    public override void Down() 
    { 
     RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_NewName", "ClassForStackoverflow_Name"); 
    } 
} 

新しい移行ファイルを。その名前はまだ "名前"であり、 "名前"ではありません。どのように私はEFを削除し、列を追加したと思うことなく、それを変更することができますか?あなたは次の順序でこの変更を行う必要があり

+1

移行で有効なデータベースが更新されましたか?おそらく、update-database以外の接続文字列を使用しているかもしれません。 – pwas

+0

@pwasはい。接続文字列は開発データベースにつながります。テーブルにはすでに正しい列があります。何とかしていないクラスだけがプロパティを更新します。 – Cataklysim

+0

あなたはマイグレーションによってではなく、 "手動で" DBの変更を行いましたか?それとも今、問題は何ですか?もうフォローできません... – ChrFin

答えて

3

  1. NewName
  2. にあなたのエンティティでNameプロパティの名前を変更するには、プロジェクトに新しい移行
  3. 変更に名前変更を行うには、移行を追加しますドロップ/作成の代わりに/Downメソッドの内容のみを変更してください
  4. 移行をコンパイルして実行してください

これは既に問題なく何回もやったことです。重要なことは、作成時に移行に関連付けられたモデルスナップショットに触れないことです。

P .:もし私が正しく覚えていれば、簡単なプロパティ/列の名前を変更するときにマイグレーションを変更する必要は必ずしもないと思うので、EFは名前の変更を検出します。

+0

Worked。今私はちょうどその2つの同じマイグレーションファイルの世話をする必要があります。しかし、ありがとう。 – Cataklysim

+1

@Cataklysim: "間違った名前を変更"してからやり直す前に、すべての変更(DBとコード)を元に戻すことをお勧めします... – ChrFin

+0

まさに私が心に持っていたもの: – Cataklysim

関連する問題