2016-12-24 2 views
5

I EF bin mit 6 haben zwei einfache POCO-Klasse wie folgt:Entity Framework Tabellennamenskonvention

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

und mein Kontext

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

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

Und EF generierten Tabellen: dbo.Companies und dbo.People

Meine Frage ist Warum ist ein Tabellenname People und anderen Tabellennamen ist Companies (Ich weiß, warum Plural ist). Ich meine, eine Tabelle verwenden den Namen der Eigenschaft, und die andere Tabelle verwenden den Klassennamen?

Vielen Dank im Voraus!

enter image description here

+0

Beide verwenden den Typnamen, nur sie sind plural. Der Plural von 'Person' ist' People' – haim770

Antwort

4

Beide werden unter Verwendung ihrer Namensklasse zugeordnet.
Die Person, die Sie wahrscheinlich verwirrt hat, ist die Zuordnung der Klasse Person. Es ist eine der EF-Pluralisierungsregeln, da Menschen die Pluralform der Person sind (was mehr als eine Person bedeutet), EF hat sie als Personen abgebildet. Auf der anderen Seite, es einfach die Unternehmensklasse als Unternehmen zugeordnet.

Sie können in der OnModelCreating() Methode, indem Sie diesen Code EF Pluralisierung Konvention ausschalten, wenn Sie es nicht mögen:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

+0

OP weiß, dass EF beim Erstellen von Tabellen Pluralisierung ausführt und er möchte nicht verhindern, dass es passiert. – RBT

+0

@RBT Ja, aber er hat erwartet, dass die Personenklasse als Personen zugeordnet wird. Ich erklärte, dass es nicht sein wird. – Gimballock

+0

danke. Jetzt ist es klar . –

1

Entity Framework (EF) Modellbauer bezieht sich immer auf Ihre Klassennamen während Erstellen von Tabellen in der Datenbank im ersten Ansatz des Codes. In Ihrem Fall ist es Person und Company. EF bezieht sich beim Erstellen von Datenbanktabellen nie auf Eigenschaften in Ihrer Kontextklasse.

Während die Tabelle erstellen, versucht er, die Namen pluralize so bekam Person-People pluralized und Company zu Companies bekam pluralized.

Nur als schneller Test, wenn Sie den Namen Ihrer Company Klasse in Corporation ändern, wird der Tabellenname als Corporations erstellt. Ich habe auch die entsprechenden Eigenschaftsnamen geändert Corporation in Kontext Klasse FooBar

Hier ist, was ich es testen tat:

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 jetzt geht voran und schafft Corporations Tabelle statt (Plural von Corporation) und ignoriert den Eigenschaftsnamen FooBar, der in der Kontextklasse vorhanden ist.

In Ihrem Code war es ein Zufall, dass Sie die Eigenschaft in Ihrer Kontextklasse People genannt hatten, die zufällig Plural von Person sind. Das hat dich verwirrt und dich zum Nachdenken gebracht.