我有一个名为AccessData的类的实例,它继承自DbContext。所以它是一个实体框架代码第一个上下文类,看起来像这样......
public class AccessData : DbContext
{
public DbSet<apps_Apps> apps_AppsList;
public DbSet<apps_AppsOld> apps_AppsOldList;
...
//Several other DbSet<> properties
}
使用Reflections,我已经在AccessData对象上找到了这些DbSet属性之一,就像这样...
var listField = accessData.GetType().GetField(typeName + "List");
我现在需要能够向此DbSet属性添加对象。
鉴于我只有一个表示DbSet字段的FieldInfo对象,如何在AccessData对象上调用此特定Field的Add方法并传入一个对象?
或者换句话说,如何调用以下内容?
accessData.<FieldInfoType>.Add(obj);
希望这是有道理的。
答案 0 :(得分:8)
获取字段的值:
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);