Obtenir le nom de la table de base de données à partir de MetaData Entity Framework

.net database-metadata entity-framework

Question

J'essaie de trouver un moyen d'obtenir le nom de la table SQL sous-jacente pour un type d'entité donné. J'ai expérimenté avec les requêtes MetadataWorkspace et bien que je puisse obtenir beaucoup d'informations à partir de l'objet ou de l'espace de stockage, je n'arrive pas à comprendre comment mapper les deux.

Donc, disons que j'ai un type dans le modèle d'objet appelé Lookup - comment trouver le nom de table (wws_lookups) dans la base de données?

Je peux interroger tous les objets EntityType pour CSpace et SSpace et les deux éléments sont correctement répertoriés, mais je ne vois pas comment obtenir SSpace à partir de CSpace.

Y a-t-il un moyen de faire ça?

Réponse populaire

J'utilise l'approche de Nigel (extraire le nom de la table de .ToTraceString() ) mais avec quelques modifications, car son code ne fonctionnera pas si la table ne se trouve pas dans le schéma par défaut de SQL Server ( dbo.{table-name} ).

J'ai créé des méthodes d'extension pour les objets DbContext et ObjectContext :

public static class ContextExtensions
{
    public static string GetTableName<T>(this DbContext context) where T : class
    {
        ObjectContext objectContext = ((IObjectContextAdapter) context).ObjectContext;

        return objectContext.GetTableName<T>();
    }

    public static string GetTableName<T>(this ObjectContext context) where T : class
    {
        string sql = context.CreateObjectSet<T>().ToTraceString();
        Regex regex = new Regex(@"FROM\s+(?<table>.+)\s+AS");
        Match match = regex.Match(sql);

        string table = match.Groups["table"].Value;
        return table;
    }
}

Plus de détails ici:
Entity Framework: Obtenir le nom de la table mappée d'une entité



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow