(EF Core 3.x): EF Core 3.0, API - Relational() , Get Set, :
var entityType = dbContext.Model.FindEntityType(clrEntityType);
var tableName = entityType.GetTableName();
var tableSchema = entityType.GetSchema();
foreach (var property in entityType.GetProperties())
{
var columnName = property.GetColumnName();
var columnType = property.GetColumnType();
};
(EF Core 2.x): EF Core 2.0, , . EF Core , Relational():
var entityType = dbContext.Model.FindEntityType(clrEntityType);
var tableName = entityType.Relational().TableName;
var tableSchema = entityType.Relational().Schema;
foreach (var property in entityType.GetProperties())
{
var columnName = property.Relational().ColumnName;
var columnType = property.Relational().ColumnType;
};
(EF Core 1.x):
EF Core , EF - DbContext.Model, IModel, GetEntityTypes FindEntityType, IEntityType, GetProperties FindProperty, IProperty ..
, EF Core . , , , IRelationalDatabaseProviderServices AnnotationProvider TypeMapper , .
:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Storage;
public class DbColumnInfo
{
public string Name;
public string Type;
}
public static class RelationalDbHelpers
{
public static IEnumerable<DbColumnInfo> GetDbColums(this DbContext dbContext, Type clrEntityType)
{
var dbServices = dbContext.GetService<IDbContextServices>();
var relationalDbServices = dbServices.DatabaseProviderServices as IRelationalDatabaseProviderServices;
var annotationProvider = relationalDbServices.AnnotationProvider;
var typeMapper = relationalDbServices.TypeMapper;
var entityType = dbContext.Model.FindEntityType(clrEntityType);
var tableMap = annotationProvider.For(entityType);
var tableName = tableMap.TableName;
var tableSchema = tableMap.Schema;
return from property in entityType.GetProperties()
let columnMap = annotationProvider.For(property)
let columnTypeMap = typeMapper.FindMapping(property)
select new DbColumnInfo
{
Name = columnMap.ColumnName,
Type = columnTypeMap.StoreType
};
}
}