【发布时间】:2011-09-09 07:53:15
【问题描述】:
我使用 EF 代码优先 4.1。在我的应用程序中。现在我想使用泛型类型通过 WCF 服务获取实体。 我试图反映泛型类型并调用 DbSet 对象的方法 ToList。 这是我的代码:
public string GetAllEntries(string objectType)
{
try
{
var mdc =
Globals.DbConnection.Create(@"some_db_connection", true);
// Getting assembly for types
var asob = Assembly.GetAssembly(typeof(CrmObject));
// getting requested object type from assembly
var genericType = asob.GetType(objectType, true, true);
if (genericType.BaseType == typeof(CrmObject))
{
// Getting Set<T> method
var method = mdc.GetType().GetMember("Set").Cast<MethodInfo>().Where(x => x.IsGenericMethodDefinition).FirstOrDefault();
// Making Set<SomeRealCrmObject>() method
var genericMethod = method.MakeGenericMethod(genericType);
// invoking Setmethod into invokeSet
var invokeSet = genericMethod.Invoke(mdc, null);
// invoking ToList method from Set<> invokeSet
var invokeToList = invokeSet.GetType().GetMember("ToList").Cast<MethodInfo>().FirstOrDefault();
//this return not referenced object as result
return invokeToList.ToString();
}
return null;
}
catch (Exception ex)
{
return ex.Message + Environment.NewLine + ex.StackTrace;
}
}
事实上,我编写了return mdc.Set<SomeRealCrmObject>().ToList() 之类的代码——对我来说很好用!但是后来我使用了泛型类型,我在对象DbSet<SomeRealCrmObject>() 中找不到方法 ToList。
【问题讨论】:
标签: linq reflection entity-framework-4.1 ef-code-first