【发布时间】:2013-11-18 15:08:40
【问题描述】:
当查询给定类型的所有对象的实体框架时,你会做这样的事情:
List<MyDesiredObjects> = _myContext.MyDesiredObjects.ToList();
但是如果类型是可变的,有没有一种方法可以创建一个函数来查询 EF 以查找给定类型的所有对象?我已经创建了这个函数,它至少可以编译:
private List<TEntity> GetFromEF<TEntity>() where TEntity : class
{
MyDBEntities context = new UnityDBEntities(_entityConnection);
IObjectContextAdapter adapter = (IObjectContextAdapter)context;
System.Data.Objects.ObjectContext oContext = adapter.ObjectContext;
return oContext.CreateObjectSet<TEntity>().ToList();
}
但我正在努力寻找如何调用它,更不用说实际从中提取数据了。使用反射,像这样(ucm.MappingType 是一个类型):
MethodInfo method = typeof(BaseXmlReader).GetMethod("GetFromEF");
MethodInfo gMethod = method.MakeGenericMethod( ucm.MappingType.GetType() );
var meh = gMethod.Invoke(null, null);
由于对象引用未设置为对象实例而失败。而且我什至还没有分页我的列表。
还有其他方法可以解决这个问题吗?
【问题讨论】:
-
你从哪里得到异常?是在调用方法时还是在 GetFromEF 中?
-
它在 method.MakeGenericMethod - 但我刚刚发现那是因为 method 为空。
-
调用泛型方法的一种方式是这样的:
var list = GetFromEF<MyDesiredObjects>();无需进入反射。 msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx -
您可能需要向 GetMethod 提供这些绑定标志,以使其能够获取您的私有方法 BindingFlags.NonPublic | BindingFlags.Instance
-
调用的第一个参数需要是BaseXmlReader的实例,不能在空实例上调用
标签: c# entity-framework generics reflection