Cara menentukan nama tabel dengan Entity Framework Code First Fluent API

86

Saya memiliki Entitas dan saya mengonfigurasi Entity Framework untuk memetakannya ke tabel database dengan nama yang berbeda.

Saya dapat dengan mudah melakukan ini dengan Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Tetapi karena keterbatasan sekarang saya harus menggunakan Code First Fluent API (objek domain saya akan digunakan oleh klien eksternal, jadi mereka tidak boleh spesifik teknologi - misalnya memiliki referensi ke DataAnnotations)

Saya telah mencari di MSDN tetapi tidak menemukan apa pun. Jadi apakah mungkin dan bagaimana caranya?

Terima kasih.

Bairog
sumber
Secara umum Anda harus membuat DTO (objek transfer data) dan memetakan objek EF Anda ke sana, Anda tidak boleh menggunakan kelas EF secara langsung kecuali Anda sedang mengerjakan aplikasi kecil / sepele.
reggaeguitar

Jawaban:

96

Anda akan menggunakan .ToTable()metode:

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

Sumber: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx

Martin Cron
sumber
1
saya lebih suka ini karena saya ingin semua anotasi di satu tempat
rajeemcariazo
apakah ada validasi bahwa tabel itu ada? kami mengganti nama tabel dan tidak ada yang rusak, apakah ini perilaku yang Anda harapkan? itu jelas tidak dapat melakukan CRUD pada tabel yang diganti namanya, tetapi tampaknya tidak merusak apa pun ...
AZ Chad
220

Anda juga dapat menggunakan anotasi Tabel:

[Table("InternalBlogs")]
public class Blog

Lihat: Kode Anotasi Data Pertama

Assaf S.
sumber
6
Terima kasih, tetapi jika Anda membaca pertanyaan saya dengan cermat - Anda akan melihat aplikasi itu langsung di tengahnya :)
bairog
2
Meskipun anotasi bernama "Tabel", tampaknya berfungsi dengan baik untuk tampilan dan juga untuk tabel.
Jon Schneider
@JonSchneider Saya hanya memperdebatkan definisi di sini tanpa alasan khusus, tetapi tampilan adalah tabel hanya-baca.
Erik Bergstedt
Anotasi Tabel berada di System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson
Bagaimana ini mendapat lebih banyak suara positif, pertanyaannya dengan jelas menanyakan versi api yang lancar
Worthy7
7

Gunakan metode ToTable:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}
alexmac.dll
sumber
1
Saya pikir membagi pemetaan Anda menjadi beberapa kelas adalah pendekatan yang paling bersih.
SventoryMang
1
Tapi kemudian dalam OnModelCreatingmetode Anda, Anda harus melakukan: di modelBuilder.Configurations.Add(new MyEntityMap());mana alih-alih Anda baru saja menambahkan modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");jadi tidak, ini bukan cara yang lebih bersih kecuali Anda juga memiliki pemetaan lain yang harus dilakukan untuk entitas ini.
Serj Sagan