获取所有模型类型
本文关键字:类型 模型 获取 | 更新日期: 2023-09-27 18:24:19
如何获得作为模型一部分的实体类型列表,以便测试模型是否真的与该实体类型一起工作?
var dcx = new MyDbContext();
var lst = new List<Type>();
//populate the list here somehow
//...
foreach (var t in lst) {
var set = dcx.Set(t); //I'm trying to avoid an exception here
try {
var test = set.FirstOrDefault();
} catch (Exception ex) {
Console.WriteLine("{0} has an error", t);
}
}
注意:即使在MyDbContext
上没有对应的DbSet
属性,也完全可以查询dcx.Set(t)
;因此,仅仅通过反射来迭代返回类型的泛型定义为DbSet<T>
甚至IDbSet<T>
的MyDbContext
的属性是不够的。
也许是这样的?
var types = typeof(MyDbContext)
.GetProperties()
.Where(prop => prop.PropertyType.IsGenericType)
.Where(prop => prop.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
.Select(prop => prop.PropertyType.GenericTypeArguments.First())
.Distinct();
感谢@GertArnold评论中的链接,我现在使用以下内容:
var dcx = new MyDbContext();
var objContext = ((IObjectContextAdapter)dcx).ObjectContext;
var types = objContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace).Select(x => Type.GetType(x.FullName));
foreach (var t in lst) {
...