繁体   English   中英

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

[英]DbSet<TEntity>.Find() - Reflection

我试图:

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

但是在“调用”时会引发异常:

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

有没有一种方法可以通过反射调用DbSet.Find(params object [] keyValues)?


ps。

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

尝试这个:

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

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

我用这个解决了:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM