Вот метод, который работает аналогично принятому ответу, за исключением того, что он поддерживает a) типы прокси (например, если вы динамически получаете тип сущности EF6, он может иметь тип "Contact_1A2B3C4D5E")вместо «Контакт») и б) наследование (таблица на тип, таблица на иерархию).
private static string GetEntitySetName(ObjectContext objectContext, Type type)
{
if (objectContext == null) throw new ArgumentNullException(nameof(objectContext));
if (type == null) throw new ArgumentNullException(nameof(type));
EntityContainer container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
return container.BaseEntitySets
.Where(x =>
(x.ElementType.Name == type.Name) ||
(x.ElementType.Name == type.BaseType?.Name) ||
(x.ElementType.Name == type.BaseType?.BaseType?.Name)
)
.Select(x => x.Name)
.FirstOrDefault() ?? throw new ArgumentException($"Specified type is not an entity type.", nameof(type));
}