2012-05-10 9 views
0

efプロジェクトは既存のレガシーデータベースを使用していますが、ef-migrationsを使用して新しいテーブルを追加しています。これらのエンティティでは、新しいスキーマを使用してテーブルを作成し、レガシーテーブルから分離します。我々は、dbテーブル上で複数形のクラス名を持つ規約を使用します。 しかし、(複数のテーブル名を持たない)レガシーテーブルにマップする新しいクラスを追加すると、efはマッピングを無視するようです。 エンティティクラス:エンティティフレームワークのコードファーストはテーブルマッピングを無視します

public class Aktor:IVersionedEntityWithId 
{ 
    public int Id { get; set; } 
    public string Navn { get; set; } 
    public byte[] Version { get; set; } 
} 

マッピングコード:

protected virtual void MapAktor(EntityTypeConfiguration<Tilsyn.Domain.Aktor> config){ 
     config.ToTable("dbo.Aktor"); 
     config.Property(v=>v.Version).IsConcurrencyToken().IsRowVersion(); 
     config.HasKey(e=>e.Id); 
    } 

例外:

System.Data.EntityCommandExecutionException: コマンド定義を実行中にエラーが発生しました。詳細については、内部例外を参照してください。 ---> System.Data.SqlClient.SqlException:無効なオブジェクト名 'dbo.Aktors'。

テーブル名を取得するために、まだsqlがクラス名に生成されたようです。この写真には何が欠けていますか? ToTableメソッドを間違って使用していますか?

更新:クラス名をテーブル名以外に変更すると動作するようです。名前をもう一度変更すると、問題は解決しませんでした。 EFキャッシュまたは隠しマッピングファイルが存在するかどうか

+0

BTW: 'ToTable'は、テーブルとスキーマ名をマッピングする2パラメータのオーバーロードを持っています:' config.ToTable( "Aktor"、 "dbo") '。しかし、おそらくあなたの問題とは関係がありません。 – Slauma

答えて

2

DBContextサブクラスでOnModelCreating()メソッドをオーバーライドして、マッピングを作成してみてください。

+0

これは私のスニペットからは分かりませんが、それは実際に私たちがやっていることです。 –

+0

私と全く違って見える – reach4thelasers

+0

はい、わかります。すべてのエンティティクラスからT4を使用してマッピングクラスを生成し、スニペットのメソッドはOnModelCreatedから呼び出されます。私を信頼してください:) –

関連する問題