使用reflection,在已存在的对象上调用Field的方法

我有一个名为AccessData的类的实例,它inheritance自DbContext。 所以它是一个entity framework代码第一个上下文类,看起来像这样……

public class AccessData : DbContext { public DbSet apps_AppsList; public DbSet apps_AppsOldList; ... //Several other DbSet properties } 

使用Reflections,我已经在AccessData对象上找到了这些DbSet属性之一,就像这样……

 var listField = accessData.GetType().GetField(typeName + "List"); 

我现在需要能够向此DbSet属性添加对象。

鉴于我只有一个表示DbSet字段的FieldInfo对象,如何在AccessData对象上调用此特定Field的Add方法并传入一个对象?

或者换句话说,我该怎么称呼以下内容?

 accessData..Add(obj); 

希望这是有道理的。

获得该字段的值:

 object fldVal = listField.GetValue(accessData); 

获取要调用的方法的MethodInfo

 MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) }); 

并调用它:

 addMethod.Invoke(fldVal, new object[] { obj }); 

或者,如果您使用的是.NET 4,则可以使用新的dynamic关键字来简化最后两个步骤:

 dynamic fldVal = listField.GetValue(accessData); fldVal.Add(obj);