엔티티 테이블 이름 가져 오기 - EF7

.net c# entity-framework entity-framework-6 entity-framework-core

문제

질문으로, 누군가 엔티티 프레임 워크 7에서 엔티티 테이블 이름을 얻는 방법을 알고 있습니까?

엔티티 프레임 워크 6.1 (다른 사이트에서 링크를 찾을 수 없음)에서이 작업을 수행하는 코드가 있지만 엔티티 프레임 워크 7에서 참조 된 인터페이스 / 오브젝트가없는 것 같습니다.

EF6.1 코드

public string GetTableName(Type type)
{
    var metadata = ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace;
    var objectItemCollection = ((ObjectItemCollection)metadata.GetItemCollection(DataSpace.OSpace));
    var entityType = metadata.GetItems<EntityType>(DataSpace.OSpace).Single(e => objectItemCollection.GetClrType(e) == type);
    var entitySet = metadata.GetItems(DataSpace.CSpace).Where(x => x.BuiltInTypeKind == BuiltInTypeKind.EntityType).Cast<EntityType>().Single(x => x.Name == entityType.Name);
    var entitySetMappings = metadata.GetItems<EntityContainerMapping>(DataSpace.CSSpace).Single().EntitySetMappings.ToList();

    EntitySet table = null;

    var mapping = entitySetMappings.SingleOrDefault(x => x.EntitySet.Name == entitySet.Name);
    if (mapping != null)
    {
        table = mapping.EntityTypeMappings.Single().Fragments.Single().StoreEntitySet;
    }
    else
    {
        mapping = entitySetMappings.SingleOrDefault(x => x.EntityTypeMappings.Where(y => y.EntityType != null).Any(y => y.EntityType.Name == entitySet.Name));

        if (mapping != null)
        {
            table = mapping.EntityTypeMappings.Where(x => x.EntityType != null).Single(x => x.EntityType.Name == entityType.Name).Fragments.Single().StoreEntitySet;
        }
        else
        {
            var entitySetMapping = entitySetMappings.Single(x => x.EntityTypeMappings.Any(y => y.IsOfEntityTypes.Any(z => z.Name == entitySet.Name)));
            table = entitySetMapping.EntityTypeMappings.First(x => x.IsOfEntityTypes.Any(y => y.Name == entitySet.Name)).Fragments.Single().StoreEntitySet;
        }
    }

    return (string)table.MetadataProperties["Table"].Value ?? table.Name;
}

수락 된 답변

같은 것을 달성하기 위해 지금해야 할 유일한 일은 다음과 같습니다.

public string GetTableName(Type type)
{
   return this.Model.GetEntityType(type).SqlServer().TableName;
}

추신 :이 메서드는 귀하의 DbContext 클래스에서 선언 된 가정, 그렇지 않으면 this DbContext 인스턴스에 대한 this 키워드를 변경하십시오.

최신 정보

GetEntityType 이름이 바뀌 었습니다 FindEntityType . 이 링크 에서 더 많은 정보를 찾을 수 있습니다.

public string GetTableName(Type type)
{
   return this.Model.GetEntityType(type).SqlServer().TableName;
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.