Frage

Wie die Frage besagt, weiß jemand, wie man den Entity-Tabellennamen im Entity Framework 7 bekommt?

Ich habe den Code, um dies in Entity Framework 6.1 zu tun (von einer anderen Seite, Link kann nicht gefunden werden), aber keine der Schnittstellen / Objekte scheinen im Entity Framework 7 referenziert zu sein.

Code für 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;
}

Akzeptierte Antwort

Das einzige, was Sie jetzt tun müssen, um dasselbe zu erreichen, ist folgendes:

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

PS: Ich bin dieses Verfahren unter der Annahme in Ihrem erklärt DbContext Klasse, sonst die Änderung this Schlüsselwort für Ihre DbContext Instanz.

Aktualisieren

GetEntityType wurde in FindEntityType umbenannt. Sie können mehr Informationen in diesem Link finden

return this.Model.FindEntityType(type).SqlServer().TableName;


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum