如何获取属于模型的实体类型列表,以便我可以测试模型实际上是否适用于该实体类型?
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);
}
}
注意:即使dcx.Set(t)
上没有相应的DbSet
属性,也可以查询MyDbContext
;因此,通过对MyDbContext
属性的反思进行迭代是不够的,DbSet<T>
的返回类型的通用定义为IDbSet<T>
甚至{{1}}。
答案 0 :(得分:1)
也许是这样的?
var types = typeof(MyDbContext)
.GetProperties()
.Where(prop => prop.PropertyType.IsGenericType)
.Where(prop => prop.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
.Select(prop => prop.PropertyType.GenericTypeArguments.First())
.Distinct();
答案 1 :(得分:0)
感谢@GertArnold 's comment中的链接,我现在正在使用以下内容:
var dcx = new MyDbContext();
var objContext = ((IObjectContextAdapter)dcx).ObjectContext;
var types = db.ObjectContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace).Select(x => Type.GetType(x.FullName));
foreach (var t in lst) {
...