0

既存のレガシー データベースを使用する ef プロジェクトがありますが、ef-migration を使用して新しいテーブルを追加しています。これらのエンティティについては、新しいスキーマを使用してテーブルを作成し、従来のテーブルから分離します。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 キャッシュまたは非表示のマッピング ファイルはありますか?

4

1 に答える 1

2

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Tilsyn.Domain.Aktor>().ToTable("dbo.Aktor");
}
于 2012-05-10T11:24:18.660 に答える