2017-07-17 10 views
0

私のプロジェクトでエンティティフレームワークコードファーストを使用していますが、私は非常に愚かなことを修正できませんでした。私はSQL Server Management Studioでテーブルの名前を変更してから削除しました。私は正しいテーブルを再作成しました(ちょうどここにいないはずです)。今はもうここにはなく、私はEFがもはや存在しないテーブルを探すので(たとえ私がどこにでも名前を変更したとしても)、私のクエリで例外を取得し続けます。今私のテーブルはRelImpUserと呼ばれていました。以前はRelImpUsersでした。エンティティフレームワークの名前変更の間違い

だから私は、その後で、移行を行う、SQL Serverでテーブルを再作成しようとしている:

public override void Down() 
    { 
     DropTable("dbo.RelImpUsers"); 
    } 

しかし、これは私のテーブルを削除しません。クエリを実行するたびにRelImpUsersが表示され、RelImpUserというコードは表示されません。任意のアイデアをどのようにこれを修正するには?あなたが望むなら私はいくつかのコードを追加することができます、私はちょうどここでそれほど役に立たないと感じました。

編集1:それは私のテーブルの複数化と関係があるかもしれません。だから私のテーブルはすべて複数の名前を持っていましたが、新しいものはありませんが、EFは複数コード化しています。

ありがとうございます!

+1

私はこれに焦げた地球をお勧めします。 SQLからデータベースを削除し、プロジェクトからマイグレーションを削除し、データモデルから再初期化します(テーブル名を修正した後) – Ortund

+0

EFのバージョンを教えてください。 – Jimbot

+0

バージョン6.0.0.0と私はプロジェクトにVMを移す必要があるので、私は@Ortundの提案に行くつもりです、それは本当に問題ではありません。 –

答えて

1

コードファーストは、そのモデルを使用してクエリを構築します。あなたのRelImpUserクラスに注釈を付ける(または同等の流暢なコードを追加)する必要があります。

using System.ComponentModel.DataAnnotations.Schema; 

[Table("RelImpUser")] 
public class RelImpUser 
{ 
    public int RelImpID { get; set; } 
    public string Field1{ get; set; } 
    ... 
} 

流暢同等:

modelBuilder.Entity<RelImpUser>().ToTable("RelImpUser"); 

あなたは複数形の名前を使用しない場合、あなたはその規則をオフにすることができます:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 
+0

Fluent APIでの作業が気に入らないのは私だけですか?正直なところ、これらのオプションを指定すると、私は流暢なコードを追加する前にDataAnnotationを絶対に選ぶだろう – Ortund

+2

私は流暢なコードを好む。関心事の分離。 POCOs P: –

+0

しかし、注釈は複数形のテーブルを指し示す必要がありますか?意味 '[Table(" RelImpUsers ")]'、またはそれを単数形にしますか? –

関連する問題