Entity Framework Code First FluentAPIを使用してテーブル名を指定する方法


86

エンティティがあり、別の名前のデータベーステーブルにマップするようにEntityFrameworkを構成します。

これは、Code First DataAnnotationsDataAnnotations.Schema.TableAttribute)を使用して簡単に実行できます。

しかし、制限のため、Code First Fluent APIを使用する必要があります(私のドメインオブジェクトは外部クライアントによって使用されるため、テクノロジー固有のものであってはなりません-たとえば、DataAnnotationsへの参照があります)

MSDNで検索しましたが、何も見つかりませんでした。それで、それは可能で、どのようにですか?

ありがとうございました。


一般に、DTO(データ転送オブジェクト)を作成し、EFオブジェクトをそれらにマップする必要があります。小規模で些細なアプリで作業している場合を除き、EFクラスを直接使用しないでください。
reggaeguitar 2016

回答:


95

次の.ToTable()方法を使用します。

modelBuilder.Entity<Department>().ToTable("t_Department");   

ソース:MSDN:http//msdn.microsoft.com/en-us/data/jj591617.aspx


1
すべての
注釈

テーブルが存在することの検証はありますか?テーブルの名前を変更しましたが、何も壊れませんでした。これは期待どおりの動作ですか?名前が変更されたテーブルでCRUDを実行できないことは明らかですが、何も壊れていないようです...
AZ Chad

217

Tableアノテーションを使用することもできます。

[Table("InternalBlogs")]
public class Blog

参照: コードファーストデータ注釈


6
Thxですが、私の質問を注意深く読むと、そのアプローチが真ん中に直接表示されます:)
bairog 2014年

2
注釈の名前は「テーブル」ですが、ビューとテーブルで正常に機能しているように見えます。
ジョンシュナイダー2015年

@JonSchneiderここでは特に理由もなく定義について議論していますが、ビューは読み取り専用のテーブルです。
Erik Bergstedt 2015

テーブル注釈はSystem.ComponentModel.DataAnnotations.Schema;にあります。
PéturIngi Egilsson

これはどのようにしてより多くの賛成を得ましたか、質問は明らかに流暢なapiバージョンを求めています
Worthy7

7

ToTableメソッドを使用します。

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
マッピングをクラスに分割するのが最もクリーンなアプローチだと思います。
SventoryMang 2016

1
しかし、あなたのOnModelCreatingメソッドでは、あなたがしなければなりません:modelBuilder.Configurations.Add(new MyEntityMap());あなたがちょうどmodelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");そういいえを追加することができた代わりに、あなたがこのエンティティのために行う他のマッピングも持っていない限り、これはよりクリーンな方法ではありません。
Serj Sagan 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.