我想:
...
int id = 5;
//DB is a instance of DbContext
MethodInfo methodFind = DB.GetType().GetMethod("Find");
var resultFind = methodFind.Invoke(entityCol, new object[]{id});
但是,#34; Invoke"
会引发异常"Object of type 'System.Int32' cannot be converted to type 'System.Object[]'."
有没有办法用反射调用DbSet.Find(params object [] keyValues)?
PS。
我在CustomAuthorization属性上使用它,我也接受改进这部分代码的建议。我试图检查某个实体(使用属性)的某个寄存器是否可以由某个用户通过其共同的" CompanyId"属性,继承自" BaseModel" (所以所有的桌子都有这个属性)
答案 0 :(得分:3)
试试这个:
var resultFind = methodFind.Invoke(entityCol, new object[]{new object[]{id}});
要在对象[]中调用的第二个参数,它需要包含对象,映射Find方法的参数。 “查找”的第一个参数恰好是一个对象[],因此您需要将其嵌套。
答案 1 :(得分:1)
我用这个解决了这个问题:
var curEntityPI = DB.GetType().GetProperties().Where(pr => pr.Name == entityName).First();
var curEntityType = curEntityPI.PropertyType.GetGenericArguments().First();
var result = DB.Set(curEntityType ).Find(id);