使用ADO.NET MetaDataWorkspace,如何获取每个实体的所有外键列表?

时间:2014-12-03 00:56:44

标签: entity-framework ado.net ado.net-entity-data-model objectcontext

感谢您的光临。

我需要查询我的实体类以获取所有实体(表)的列表,并且对于每个实体/表,我需要所有外键列表(导航属性?)以及计数存储在该实体的相应数据表中的记录。

到目前为止,我已经找到了如何获取所有实体的列表,但我仍然坚持如何获取每个实体的外键和记录数。任何帮助表示赞赏。

到目前为止,这是我的代码:

 public static void GetAllEntities(SomeEntityContext db)
        {
            int trick = db.Some_Table.Count(); //The code below won't work without running some initial call against the entity context.  Not sure why.

            //Get a list of entities / tables
            IEnumerable<EntitySet> tables = db.MetadataWorkspace.GetItemCollection(DataSpace.SSpace)
                .GetItems<EntityContainer>()
                .Single()
                .BaseEntitySets
                .OfType<EntitySet>()
                .Where(s => !s.MetadataProperties.Contains("Type")
                            || s.MetadataProperties["Type"].ToString() == "Tables");

            foreach (var table in tables)
            {
                var tableName = table.MetadataProperties.Contains("Table")
                    && table.MetadataProperties["Table"].Value != null
                  ? table.MetadataProperties["Table"].Value.ToString()
                  : table.Name;

                //Print out some data
                System.Diagnostics.Debug.WriteLine(tableName);

                //ALSO NEED THE FOLLOWING:
                //--Count of records in table
                //--List of foreign keys for table

            }
        }

1 个答案:

答案 0 :(得分:0)

尝试按如下方式创建DbContext扩展: 例如http://weblogs.asp.net/ricardoperes/entity-framework-metadata

这些方法应该允许您从TableNavigationColumns等确定FK。

  • 的getTables
  • getTableName时
  • 一对多
  • OneToOne
  • 多对一
  • 多对多
  • GetIdProperties
  • GetNavigationProperties
  • GetTableKeyColumns
  • GetTableColumns
  • GetTableNavigationColumns