วิธีระบุชื่อตารางด้วย Entity Framework Code First Fluent API


86

ฉันมีเอนทิตีและฉันต้องการกำหนดค่าเอนทิตีเฟรมเวิร์กเพื่อแมปกับตารางฐานข้อมูลที่มีชื่ออื่น

ฉันสามารถทำได้อย่างง่ายดายด้วยCode First DataAnnotations ( DataAnnotations.Schema.TableAttribute )

แต่เนื่องจากข้อ จำกัด ในตอนนี้ฉันจึงต้องใช้Code First Fluent API (อ็อบเจ็กต์โดเมนของฉันจะถูกใช้โดยไคลเอนต์ภายนอกดังนั้นจึงไม่ควรใช้เฉพาะเทคโนโลยี - เช่นมีการอ้างอิงถึง DataAnnotations)

ฉันค้นหาใน MSDN แต่ไม่พบอะไรเลย เป็นไปได้หรือไม่และอย่างไร

ขอขอบคุณ.


โดยทั่วไปคุณควรสร้าง DTO (ออบเจ็กต์การถ่ายโอนข้อมูล) และจับคู่ออบเจ็กต์ EF ของคุณกับวัตถุเหล่านั้นคุณไม่ควรใช้คลาส EF โดยตรงเว้นแต่คุณจะใช้แอปขนาดเล็ก / ไม่สำคัญ
reggaeguitar

คำตอบ:


96

คุณจะใช้.ToTable()วิธีการ:

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

ที่มา: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
ฉันชอบสิ่งนี้เพราะฉันต้องการ anotations ทั้งหมดในที่เดียว
rajeemcariazo

มีการตรวจสอบว่ามีตารางอยู่หรือไม่ เราเปลี่ยนชื่อโต๊ะและไม่มีอะไรพังนี่คือพฤติกรรมที่คุณคาดหวังหรือไม่? เห็นได้ชัดว่าไม่สามารถทำ CRUD บนตารางที่เปลี่ยนชื่อได้ แต่ดูเหมือนจะไม่ทำลายอะไรเลย ...
AZ ชาด

220

คุณยังสามารถใช้คำอธิบายประกอบตาราง:

[Table("InternalBlogs")]
public class Blog

ดู: Code First Data Annotations


6
ขอบคุณ แต่ถ้าคุณอ่านคำถามของฉันอย่างละเอียดคุณจะเห็นแอปนั้นอยู่ตรงกลาง :)
bairog

2
แม้ว่าคำอธิบายประกอบจะมีชื่อว่า "ตาราง" แต่ดูเหมือนว่าจะทำงานได้ดีสำหรับมุมมองและตาราง
Jon Schneider

@JonSchneider ฉันแค่เถียงคำจำกัดความที่นี่โดยไม่มีเหตุผลโดยเฉพาะ แต่มุมมองเป็นตารางแบบอ่านอย่างเดียว
Erik Bergstedt

คำอธิบายประกอบตารางอยู่ใน System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson

สิ่งนี้ได้รับการโหวตเพิ่มขึ้นอย่างไรคำถามอย่างชัดเจนสำหรับเวอร์ชัน API ที่คล่องแคล่ว
คุ้มค่า 7

7

ใช้วิธี ToTable:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

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

1
ฉันคิดว่าการแยกการแมปของคุณออกเป็นชั้นเรียนเป็นแนวทางที่สะอาดที่สุด
SventoryMang

1
แต่ในOnModelCreatingวิธีการของคุณคุณต้องทำ: modelBuilder.Configurations.Add(new MyEntityMap());โดยที่คุณสามารถเพิ่มค่าmodelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");นี้แทนได้นี่ไม่ใช่วิธีที่สะอาดกว่าเว้นแต่คุณจะมีการทำแผนที่อื่น ๆ สำหรับเอนทิตีนี้ด้วย
Serj Sagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.