【发布时间】:2015-11-26 00:22:34
【问题描述】:
如何获取属于模型一部分的实体类型列表,以便测试模型是否真正适用于该实体类型?
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);因此,仅通过反射迭代 MyDbContext 的属性是不够的,其返回类型的通用定义是 DbSet<T> 甚至是 IDbSet<T>。
【问题讨论】:
-
模型或 POCO 将是不同类型,不能创建不同类型的 List
,只能创建相同类型的 List ,本例为 List 特定 POCO 或模型类型。唯一的选择是 List -
@coderealm 我不确定您是否正确。该列表是
Type的List,操作员循环遍历每个Type并从数据库上下文中获取对应的Set。我不确定您是否可以在这里避免异常,尽管如果您将set = dcx.Set(t)移动到 try/catch 内部(或将其放入自己的 try/catch 中),那么您至少可以吞下它。否则,您可以创建一个放在模型类上的属性,您可以通过反射查询以获取具有该属性的所有类型。 -
@coderealm 我可以创建一个包含不同字符串的
List<string>。System.Type只是一个包含给定类型信息的类。 -
你可能想看看这个:stackoverflow.com/a/3893502/861716
标签: c# entity-framework ef-code-first