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.


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


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


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);
    }
}

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.