從實體框架MetaData獲取數據庫表名稱

.net database-metadata entity-framework

我試圖找到一種方法來獲取給定實體類型的基礎SQL表名稱。我已經嘗試過使用MetadataWorkspace查詢,雖然我可以從對像或存儲空間獲取大量信息,但我似乎無法弄清楚如何在兩者之間進行映射。

所以說我在對像模型中有一個名為Lookup的類型 - 如何在數據庫中找到tablename(wws_lookups)?

我可以查詢CSpace和SSpace的所有EntityType對象,我可以看到兩者都正確列出,但我無法弄清楚如何從CSpace獲取SSpace。

有沒有辦法做到這一點?

熱門答案

我使用Nigel的方法(從.ToTraceString()提取表名)但有一些修改,因為如果表不在默認的SQL Server模式( dbo.{table-name} )中,他的代碼將無法工作。

我已經為DbContextObjectContext對象創建了擴展方法:

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;
    }
}

更多細節在這裡:
實體框架:從實體獲取映射表名稱



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因