2017-09-29 5 views
0

Ich möchte, dass mein Domänenklassenname mit meinem Tabellennamen übereinstimmt (keine Pluralisierung).Singuläre Tabellennamen mit EF Core 2 verwenden

In EF-Core 1.1, habe ich diesen Code zu tun:

public static void RemovePluralisingTableNameConvention(this ModelBuilder modelBuilder) 
{ 
    foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes()) 
    { 
     entityType.Relational().TableName = entityType.DisplayName(); 
    } 
} 

In EF Core 2.0, dieser Code kompiliert nicht als Relational() ist keine Methode auf IMutableEntityType. in EF-Core Wie dem auch sei, 2.0, haben sie hinzugefügt IPluralizer, hier dokumentiert:

https://github.com/aspnet/EntityFramework.Docs/blob/master/entity-framework/core/what-is-new/index.md#pluralization-hook-for-dbcontext-scaffolding

Es gibt nicht viele Beispiele zu zeigen, wie das gleiche Verhalten zu erreichen, die ich vorher hatte. Gibt es Hinweise darauf, wie Pluralisierung in EF Core 2 entfernt werden kann?

+0

Die Konvention von EF Core 2.0 besteht darin, den Namen eines DbSet für eine Tabelle zu verwenden. Wenn Sie für eine Tabelle kein DbSet angegeben haben, verwendet EF Core den Klassennamen als Tabellenname. Offensichtlich wird dies alles ignoriert, wenn Sie den Tabellennamen mithilfe von ToTable im fließenden Mapping angegeben haben. –

Antwort

1

Sie können genau den gleichen Code verwenden. Relational() ist Erweiterung Methode definiert in der RelationalMetadataExtensions Klasse innerhalb Microsoft.EntityFrameworkCore.Relational.dllAssembly, so stellen Sie sicher, dass Sie darauf verweisen.

Was IPluralizer, wie Sie es aus dem Link sehen kann nur ein Pluralisierung Haken für DbContext Gerüste, das heißt Entitätsklasse Erzeugung von Datenbank, verwendet Entitätstyp Namen vereinzeln und DbSet Namen pluralize. Es wird nicht für die Generierung von Tabellennamen verwendet. Die Standardtabelle Namenskonvention ist in Table Mapping Abschnitt der Dokumentation erklärt:

Vereinbarungsgemäß wird jede Einheit sein Setup mit dem gleichen Namen in eine Tabelle abzubilden als DbSet<TEntity> Eigenschaft, die das Unternehmen auf dem abgeleiteten Kontext aussetzt. Wenn kein DbSet<TEntity> für die angegebene Entität enthalten ist, wird der Klassenname verwendet.