数据库集<;TEntity>;.Find()-反射

本文关键字:反射 Find TEntity lt 数据库 gt | 更新日期: 2023-09-27 17:58:36

我正在尝试:

...
int id = 5;
//DB is a instance of DbContext
MethodInfo methodFind = DB.GetType().GetMethod("Find");
var resultFind = methodFind.Invoke(entityCol, new object[]{id});

但是在"Invoke"处抛出异常:

"Object of type 'System.Int32' cannot be converted to type 'System.Object[]'."

有没有一种方法可以调用DbSet。是否查找具有反射的(params object[]keyValues)?


ps。

我在CustomAuthorization属性上使用它,我也接受改进这部分代码的建议。我试图检查某个实体的某个寄存器(使用属性)是否可以由某个用户通过其从"BaseModel"继承的通用"CompanyId"属性进行编辑(因此所有表都具有此属性)

数据库集<;TEntity>;.Find()-反射

试试这个:

var resultFind = methodFind.Invoke(entityCol, new object[]{new object[]{id}});

在需要包含映射Find方法参数的对象[]中调用的第二个参数。Find的第一个参数恰好也是一个对象[],因此您需要嵌套它。

我用这个解决了这个问题:

var curEntityPI = DB.GetType().GetProperties().Where(pr => pr.Name == entityName).First();
var curEntityType = curEntityPI.PropertyType.GetGenericArguments().First();
var result = DB.Set(curEntityType ).Find(id);