Как получить имя таблицы сопоставленного объекта в Entity Framework Core

По какой-то причине мне нужно использовать SQL в EFCore, и я буду использовать имя таблицы отображаемого объекта. Как я могу получить его?

Ответ 1

Использование пакета Microsoft.EntityFrameworkCore.Relational в 2.X:

var mapping = dbContext.Model.FindEntityType(typeof(YourEntity)).Relational();
var schema = mapping.Schema;
var tableName = mapping.TableName;

Это предполагает, что dbContext является экземпляром класса, который унаследован от DbContext, и что у вас настроен YourEntity.

Обратите внимание, что в EF Core 3.X [.Relational() расширения поставщика были заменены] (https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#provider) на геттеры, и теперь вы можете получить доступ к схеме следующим образом:

var entityType = dbContext.Model.FindEntityType(typeof(YourEntity));
var schema = entityType.GetSchema();
var tableName = entityType.GetTableName();

Ответ 2

Вы можете использовать этот статический класс

public static class AttributeReader
{
    //Get DB Table Name
    public static string GetTableName<T>(DbContext context) where T : class
    {
        // We need dbcontext to access the models
        var models = context.Model;

        // Get all the entity types information
        var entityTypes = models.GetEntityTypes();

        // T is Name of class
        var entityTypeOfT = entityTypes.First(t => t.ClrType == typeof(T));

        var tableNameAnnotation = entityTypeOfT.GetAnnotation("Relational:TableName");
        var TableName = tableNameAnnotation.Value.ToString();
        return TableName;
    }

}

Например, у нас есть класс Person, имя которого в базе данных называется People, мы можем получить людей из класса person.

var TblName= AttributeReader.GetTableName<(YourModel)>(YourContext);