Получить имя таблицы из DbEntityEntry (Code-First) - PullRequest
2 голосов
/ 06 июля 2011

Простой: Как получить имя сопоставленной таблицы из объекта DbEntityEntry? Я в классе, который расширяет DbContext. Я видел примеры для ObjectContext, но не относится к CF.

Спасибо.

Ответы [ 4 ]

9 голосов
/ 18 июля 2012

Как указано в другом ответе, имя таблицы можно получить с помощью IObjectContextAdapter

 private string GetTableName(DbEntityEntry ent)
        {
            ObjectContext objectContext = ((IObjectContextAdapter) this).ObjectContext;
            Type entityType = ent.Entity.GetType();

            if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
                entityType = entityType.BaseType;

            string entityTypeName = entityType.Name;

            EntityContainer container =
                objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
            string entitySetName = (from meta in container.BaseEntitySets
                                    where meta.ElementType.Name == entityTypeName
                                    select meta.Name).First();
            return entitySetName;
        }

Приведенный выше код также проверяет прокси. Надеюсь, что это поможет кому-то еще, кто перейдет по этой ссылке, поскольку я предполагаю, что оригинальный постер решил эту проблему давным-давно.

6 голосов
/ 22 мая 2016

Я нашел более чистый способ в msdn избавиться от имени прокси.

private string GetTableName(DbEntityEntry ent)
{
     return ObjectContext.GetObjectType(entry.Entity.GetType()).Name;
}
0 голосов
/ 06 июля 2011

В msdn вы можете найти документацию для DbContext, там вы можете увидеть, что он явно реализует IObjectContextAdapter, поэтому приведите свой производный от DbContext контекст к IObjectContextAdapter и используйте свойство ObjectContext.

0 голосов
/ 06 июля 2011

На самом деле вы можете получить ObjectContext из DbContext (приведя его к IObjectContextAdapter) и использовать примеры, которые вы видели.

...