C# 获取实体表名称-EF7

C# 获取实体表名称-EF7,c#,.net,entity-framework,entity-framework-6,entity-framework-core,C#,.net,Entity Framework,Entity Framework 6,Entity Framework Core,正如问题所述,有人知道如何在EntityFramework7中获取实体表名吗 我在EntityFramework6.1中有这样做的代码(来自另一个站点,找不到链接),但在EntityFramework7中似乎没有引用任何接口/对象 EF6.1的代码 public string GetTableName(Type type) { var metadata = ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace;

正如问题所述,有人知道如何在EntityFramework7中获取实体表名吗

我在EntityFramework6.1中有这样做的代码(来自另一个站点,找不到链接),但在EntityFramework7中似乎没有引用任何接口/对象

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;
}
公共字符串GetTableName(类型)
{
var metadata=((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace;
var objectItemCollection=((objectItemCollection)metadata.GetItemCollection(DataSpace.OSpace));
var entityType=metadata.GetItems(DataSpace.OSpace).Single(e=>objectItemCollection.GetClrType(e)==type);
var entitySet=metadata.GetItems(DataSpace.CSpace).Where(x=>x.builtypekind==builtypekind.EntityType).Cast().Single(x=>x.Name==EntityType.Name);
var entitySetMappings=metadata.GetItems(DataSpace.CSSpace).Single().entitySetMappings.ToList();
EntitySet表=null;
var-mapping=entitySetMappings.SingleOrDefault(x=>x.EntitySet.Name==EntitySet.Name);
if(映射!=null)
{
table=mapping.EntityTypeMappings.Single().Fragments.Single().StoreEntitySet;
}
其他的
{
mapping=entitySetMappings.SingleOrDefault(x=>x.EntityTypeMappings.Where(y=>y.EntityType!=null).Any(y=>y.EntityType.Name==entitySet.Name));
if(映射!=null)
{
table=mapping.EntityTypeMappings.Where(x=>x.EntityType!=null).Single(x=>x.EntityType.Name==EntityType.Name).Fragments.Single().StoreEntitySet;
}
其他的
{
var entitySetMapping=entitySetMappings.Single(x=>x.EntityTypeMappings.Any(y=>y.isofentitypes.Any(z=>z.Name==entitySet.Name));
table=entitySetMapping.EntityTypeMappings.First(x=>x.IsOfEntityTypes.Any(y=>y.Name==entitySet.Name)).Fragments.Single().StoreEntitySet;
}
}
返回(字符串)table.MetadataProperties[“table”].Value??table.Name;
}

要达到同样的效果,您现在需要做的唯一一件事是:

public string GetTableName(Type type)
{
   return this.Model.GetEntityType(type).SqlServer().TableName;
}
PS:我假设此方法是在
DbContext
类中声明的,否则请更改
DbContext
实例的
this
关键字

更新
GetEntityType
已重命名为
FindEntityType
。你可以在这里找到更多信息


稍后当我在一台机器上时,我会尝试这个,但如果它能工作(当然会),那太棒了!!似乎没有编译。我没有这样的方法。
。Relational
你添加了引用吗?我刚刚添加了它,什么都没有。甚至使用Microsoft.Data.Entity.Relational添加了
还是什么都没有?
GetEntityType
对我来说不存在。不过,这是可行的:
\u db.Model.FindEntityType(type).SqlServer().TableName也许他们重命名了它。
return this.Model.FindEntityType(type).SqlServer().TableName;