2016-12-24 15 views
5

Używam EF 6, mają dwa prostą klasę POCO jak poniżej:Entity Framework nazwa tabeli konwencja

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

i mój kontekstowe

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

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

i EF generowane tabele: dbo.Companies i dbo. Ludzie

Moje pytanie jest dlaczego jedna nazwa tabeli to People a inna nazwa tabeli to Companies (wiem dlaczego jest pluralizowana). Mam na myśli, jedna tabela używać nazwy właściwości, a druga tabela używać nazwy klasy?

Z góry dziękuję!

enter image description here

+0

Oba używają nazwy typu, tylko że są pluralizowane. Liczba mnoga "Osoby" to "Ludzie" – haim770

Odpowiedz

4

Oba są odwzorowywane za pomocą ich nazwy klasy.
Ten, który prawdopodobnie pomylił cię, jest mapą klasy Person. Jest to jedna z zasad pluralizacji EF, ponieważ ludzie są formą liczby mnogiej osoby (co oznacza więcej niż jedną osobę), EF zamapowało ją jako Ludzie. Z drugiej strony, po prostu mapował klasę Company jako Companies.

Można wyłączyć EF konwencję liczby mnogiej dodając ten kod w metodzie OnModelCreating() jeśli nie podoba:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

+0

OP wie, że EF wykonuje pluralizację podczas tworzenia tabel i nie chce tego powstrzymać. – RBT

+0

@RBT Tak, ale oczekiwał, że klasa Person zostanie zmapowana jako Osoby. Wyjaśniłem, że tak nie będzie. – Gimballock

+0

dzięki. Teraz to jasne . –

1

Entity Framework (EF) Model budowniczy zawsze odnosi się do nazw klas podczas tworzenie tabel w bazie danych w pierwszym podejściu kodu. W twoim przypadku jest to Person i Company. EF nigdy nie odwołuje się do właściwości w klasie kontekstu podczas tworzenia tabel bazy danych.

Podczas tworzenia tabeli, próbuje pluralize nazwiska tak Person dostałem liczbę mnogą do People i Company dostałem liczbę mnogą do Companies.

Podobnie jak szybki test, jeśli zmienisz nazwę klasy Company na Corporation, wtedy nazwa tabeli zostanie utworzona jako Corporations. Ja również zmienił odpowiednią nazwę właściwości Corporation w klasie kontekstowego do FooBar

Oto co zrobiłem, aby go przetestować:

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 teraz idzie do przodu i tworzy Corporations tabeli zamiast (liczba mnoga od Corporation) i ignoruje całkowicie nazwę właściwości FooBar, która jest obecna w klasie kontekstu.

W twoim kodzie był to zwykły zbieg okoliczności, że nazwałeś tę własność w swojej klasie kontekstowej jako People, która jest liczbą mnogą od Person. To cię zdezorientowało i zmusiło cię do myślenia.

Powiązane problemy