jda*_*vis 5 .net c# reflection entity-framework
我有一个名为AccessData的类的实例,它继承自DbContext.所以它是一个实体框架代码第一个上下文类,看起来像这样......
public class AccessData : DbContext
{
public DbSet<apps_Apps> apps_AppsList;
public DbSet<apps_AppsOld> apps_AppsOldList;
...
//Several other DbSet<> properties
}
Run Code Online (Sandbox Code Playgroud)
使用Reflections,我已经在AccessData对象上找到了这些DbSet属性之一,就像这样......
var listField = accessData.GetType().GetField(typeName + "List");
Run Code Online (Sandbox Code Playgroud)
我现在需要能够向此DbSet属性添加对象.
鉴于我只有一个表示DbSet字段的FieldInfo对象,如何在AccessData对象上调用此特定Field的Add方法并传入一个对象?
或者换句话说,如何调用以下内容?
accessData.<FieldInfoType>.Add(obj);
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的.
获得该字段的值:
object fldVal = listField.GetValue(accessData);
Run Code Online (Sandbox Code Playgroud)
获取MethodInfo要调用的方法:
MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) });
Run Code Online (Sandbox Code Playgroud)
并调用它:
addMethod.Invoke(fldVal, new object[] { obj });
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是.NET 4,则可以使用new dynamic关键字来简化最后两个步骤:
dynamic fldVal = listField.GetValue(accessData);
fldVal.Add(obj);
Run Code Online (Sandbox Code Playgroud)