如何获取Entity数据框架中所有表的列表?

时间:2010-12-29 20:44:47

标签: entity-framework entity-framework-4 edmx

我需要获取实体数据框架中所有表的列表。

我知道在Linq2SQL中我们可以使用这样的东西。 var dataContext = new DataContext(); var dataContextTableNames =(来自dataContext.Mapping.GetTables()中的表                              select tables.TableName)。ToList();

但是,我需要获取实体数据框架中所有表的列表。有任何解决方法可以在实体数据框架中获得类似的列表。

提前致谢。

1 个答案:

答案 0 :(得分:1)

[编辑]

也许这可以用来查找存储空间中的对象数量

   var count = GetEntitySetCount(myObjectContext.MetadataWorkspace);

   public static int GetEntitySetCount(MetadataWorkspace workspace)
   {
        var count = 0;

        // Get a collection of the entity containers from storage space.
        var containers = workspace.GetItems<EntityContainer>(DataSpace.SSpace);

        foreach(var container in containers)
        {
            //Console.WriteLine("EntityContainer Name: {0} ",
            //                  container.Name);

            foreach(var baseSet in container.BaseEntitySets)
            {
                if(baseSet is EntitySet)
                {
                    count++;

                    //Console.WriteLine(
                    //    "  EntitySet Name: {0} , EntityType Name: {1} ",
                    //    baseSet.Name, baseSet.ElementType.FullName);
                }
            }
        }

        return count;
    }

要检索数据库中的表数,可以在.Net 4.0中执行以下操作

myObjectContext.ExecuteStoreQuery<int>(
                "SELECT COUNT(*) from information_schema.tables WHERE table_type = 'base table'");

使用.Net 3.5

var connection = ((EntityConnection)myObjectContext.Connection).StoreConnection as SqlConnection;

var cmd = new SqlCommand("SELECT COUNT(*) from information_schema.tables WHERE table_type = 'base table'", connection);

connection.Open();

var count = (int)cmd.ExecuteScalar();

connection.Close();