如何获取所有DbContext类和每个DbContext下的所有DbSet

时间:2018-12-31 07:58:19

标签: c# entity-framework dbcontext

我正在一个大型项目中,每个DbContext下有50个以上的DbSet和100个以上的DbContext

每个DbContext都由一个单独的团队处理,他们正在根据自己的要求/更改添加/删除DbSet

从集中式视图/报告中,我想在父子视图中查看所有DbContext类和每个DbSet下的所有DbContext,以管理数据库。

如何在LinQ查询或C#函数中获取所有DbContext类和每个DbSet下的所有DbContext

通过使用以下代码,我在DbContext下获得了DbSet的列表,但就我而言,可能还会有新的DbContext

var metadata = ((IObjectContextAdapter)dbContext).ObjectContext.MetadataWorkspace;

var tables = metadata.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;

    var tableSchema = table.MetadataProperties["Schema"].Value.ToString();

    Console.WriteLine(tableSchema + "." + tableName);
}

所以我正在寻找一个动态列表,其中也应该包括新的DbContext。

如何在LinQ查询或c#函数中获取每个DbContex下的所有DbContext类和所有DbSet。

1 个答案:

答案 0 :(得分:2)

怎么样?

prepare

尚未对此进行测试。想法是梳理程序集,找到相关的类并动态调用GetEntityTypes()方法。