Cách chỉ định tên bảng với API First Fluent của Entity Framework Code


86

Tôi có một Thực thể và tôi đang định cấu hình Khung thực thể để ánh xạ nó vào một bảng cơ sở dữ liệu với tên khác.

Tôi có thể dễ dàng thực hiện việc này với Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Nhưng do những hạn chế hiện tại tôi phải sử dụng Code First Fluent API (các đối tượng miền của tôi sẽ được sử dụng bởi các ứng dụng khách bên ngoài, vì vậy chúng không được dành riêng cho công nghệ - ví dụ: có bất kỳ tham chiếu nào đến DataAnnotations)

Tôi đã tìm kiếm trên MSDN nhưng không tìm thấy gì. Vậy có được không và làm như thế nào?

Cảm ơn bạn.


Nói chung, bạn nên tạo DTO (đối tượng truyền dữ liệu) và ánh xạ các đối tượng EF của mình với chúng, bạn không bao giờ nên sử dụng trực tiếp các lớp EF trừ khi bạn đang làm việc trên một ứng dụng nhỏ / nhỏ.
reggaeguitar

Câu trả lời:


96

Bạn sẽ sử dụng .ToTable()phương pháp:

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

Nguồn: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
tôi thích điều này bởi vì tôi muốn tất cả anotations ở một nơi
rajeemcariazo

nó có bất kỳ xác nhận rằng bảng tồn tại? chúng tôi đã đổi tên một bảng và không có gì bị hỏng, đây có phải là hành vi bạn mong đợi không? rõ ràng nó không thể làm CRUD trên bảng đã đổi tên, nhưng nó dường như không phá vỡ bất cứ điều gì ...
AZ Chad

218

Bạn cũng có thể sử dụng chú thích Bảng:

[Table("InternalBlogs")]
public class Blog

Xem: Chú thích dữ liệu đầu tiên của mã


6
Thx, nhưng nếu bạn đọc kỹ câu hỏi của tôi - bạn sẽ thấy apptoach trực tiếp ở giữa nó :)
bairog

2
Mặc dù chú thích được đặt tên là "Bảng", nó có vẻ hoạt động tốt cho các dạng xem cũng như cho các bảng.
Jon Schneider

@JonSchneider Tôi chỉ tranh luận các định nghĩa ở đây không vì lý do gì cụ thể, nhưng một chế độ xem là một bảng chỉ đọc.
Erik Bergstedt

Chú thích Bảng nằm trong System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson

Làm thế nào mà điều này lại có nhiều lượt ủng hộ hơn, câu hỏi rõ ràng là yêu cầu phiên bản api trôi chảy
Worthy7

7

Sử dụng phương pháp ToTable:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

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

1
Tôi nghĩ chia nhỏ ánh xạ của bạn thành các lớp là cách tiếp cận rõ ràng nhất.
SventoryMang

1
Nhưng sau đó trong OnModelCreatingphương pháp của bạn, bạn phải làm: modelBuilder.Configurations.Add(new MyEntityMap());nơi thay vì bạn có thể chỉ cần thêm một modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");như vậy không, đây không phải là cách rõ ràng hơn trừ khi bạn cũng có ánh xạ khác để làm cho thực thể này.
Serj Sagan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.