EF Core, как сопоставить имена таблиц с именами сущностей, а не с именами DbSet?

Я вижу, что CodeFirst в EF Core генерирует имена таблиц из имен DbSet DbContext.

Если у меня есть DbSet<Person> People {get; set;}, я получу People как имя таблицы для Person, однако я бы хотел, чтобы это было Person.

Я пробовал это решение, но похоже оно не для ядра...

После этого я попытался

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
                
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        modelBuilder.Entity(entity.Name)
            .ToTable(entity.Name);
    }
}

Это лучше, но дает мне полное имя класса с пространством имен, есть ли способ убрать из него пространство имен?


person serge    schedule 12.01.2021    source источник


Ответы (1)


Используйте DisplayName() вместо Name

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
                
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        modelBuilder.Entity(entity.Name)
            .ToTable(entity.DisplayName());
    }
}
person serge    schedule 12.01.2021