gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:56 29 4
gpt4 key购买 nike

我正在处理一个大型项目,每个 DbContext 下有 50 多个 DbContext 和 100 多个 DbSet

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

从集中 View /报告中,我希望在父 subview 中的每个 DbContext 下看到所有 DbContext 类和所有 DbSet,管理数据库。

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

通过使用以下代码,我获得了 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);
}

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

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

最佳答案

怎么样:

public Dictionary<Type, List<object>> FindDbContextsInAssemblies()
{
var dbContexts = new Dictionary<Type, List<object>>();

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

foreach(var assembly in assemblies)
{
foreach(var type in assembly.GetTypes())
{
if(type.IsSubclassOf(typeof(DbContext)))
{
// Instantiate DbContext:
var context = type.GetConstructor(Array.Empty<Type>()).Invoke(Array.Empty<object>());

// Find method to get entities:
var model = type.GetProperty("Model");
var searchMethod = model.PropertyType.GetMethod("GetEntityTypes");

// Get registered entities:
var entities = searchMethod.Invoke(model.GetValue(context, null), null) as List<object>;

dbContexts[type] = entities;
}
}
}

return dbContexts;
}

还没有测试过这个。想法是梳理程序集,找到相关类并动态调用GetEntityTypes()方法。

关于c# - 如何获取每个 DbContext 下的所有 DbContext 类和所有 DbSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53985013/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com