2016-12-24 21 views
5

Tôi đang sử dụng EF 6, có hai lớp POCO đơn giản như sau:Entity Framework ước tên bảng

public class Person 
{ 
    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Company 
{ 
    public int CompanyId { get; set; } 
    public string Name { get; set; } 
} 

và bối cảnh của tôi

public class Context : DbContext 
{ 
    public Context() : base("name=codefirst") 
    { 

    } 
    public DbSet<Person> People { get; set; } 
    public DbSet<Company> Corporation { get; set; } 
} 

Và EF tạo bảng: dbo.Companiesdbo.People

Câu hỏi của tôi là tại sao một tên bảng là Con người và tên bảng khác là Công ty (Tôi biết tại sao được đa nguyên). Ý tôi là, Một bảng sử dụng tên thuộc tính và bảng kia sử dụng tên lớp?

Cảm ơn trước!

enter image description here

+0

Cả hai đều sử dụng tên loại, chỉ chúng được số nhiều. Số nhiều của 'Person' là' People ' – haim770

Trả lời

4

Cả hai đều được ánh xạ bằng cách sử dụng tên lớp học của họ.
Có thể bạn nhầm lẫn là ánh xạ của lớp Person. Đây là một trong những quy tắc đa nguyên EF, vì con người là dạng số nhiều của người (nghĩa là nhiều hơn một người), EF đã lập bản đồ nó thành Con người. Mặt khác, nó chỉ đơn giản là ánh xạ lớp Công ty thành Công ty.

Bạn có thể tắt ước pluralization EF bằng cách thêm mã này trong phương pháp OnModelCreating() nếu bạn không thích nó:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

+0

OP biết rằng EF thực hiện số nhiều trong khi tạo bảng và anh ta không muốn ngăn nó xảy ra. – RBT

+0

@RBT Có, nhưng anh ta đang mong lớp Person được ánh xạ là Người. Tôi giải thích rằng nó sẽ không được. – Gimballock

+0

cảm ơn. Bây giờ nó là rõ ràng. –

1

Entity Framework (EF) mô hình xây dựng luôn luôn đề cập đến tên lớp của bạn trong khi tạo bảng trong cơ sở dữ liệu trong cách tiếp cận mã đầu tiên. Trong trường hợp của bạn, nó là PersonCompany. EF không bao giờ đề cập đến các thuộc tính trong lớp ngữ cảnh của bạn trong khi tạo các bảng cơ sở dữ liệu.

Trong khi tạo bảng, nó cố gắng để số nhiều các tên như vậy Person được số nhiều thành PeopleCompany được số nhiều thành Companies.

Chỉ cần kiểm tra nhanh nếu bạn thay đổi tên của lớp Company thành Corporation thì tên bảng sẽ được tạo thành Corporations. Tôi cũng đã thay đổi tên sở hữu tương ứng Corporation trong lớp ngữ cảnh để FooBar

Dưới đây là những gì tôi đã làm để kiểm tra nó:

public class Person 
{ 
    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 
public class Corporation 
{ 
    public int CorporationId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Context : DbContext 
{ 
    public Context() : base("name=codefirst") 
    { 

    } 
    public DbSet<Person> People { get; set; } 
    public DbSet<Corporation> FooBar { get; set; } 
} 

EF bây giờ đi về phía trước và tạo ra Corporations bảng thay vì (số nhiều của Corporation) và bỏ qua tên thuộc tính FooBar hoàn toàn hiện diện trong lớp ngữ cảnh.

Trong mã của bạn, đó chỉ là sự trùng hợp ngẫu nhiên mà bạn đã đặt tên thuộc tính trong lớp ngữ cảnh là People xảy ra với số nhiều là Person. Điều này làm bạn bối rối và khiến bạn suy nghĩ.