2016-11-15 94 views
0

方法从数据库返回记录。参数中通过反射c调用参数的方法#

public T Find(params object[] primaryKeys) 
    { 
     var dbSet = _sessionContext.Set<T>() as DbSet<T>; 

     return dbSet != null ? dbSet.Find(primaryKeys) : null; 
    } 

我试图通过反射调用

var methodCreateReadRepositoryEntity = 
    typeof(IRepositoryFactory) 
    .GetMethod("CreateReadRepository") 
    .MakeGenericMethod(entityMetadata.GetEntityType()); 

var entityReadRepository = 
    methodCreateReadRepositoryEntity 
    .Invoke(_repositoryFactory, new object[] { _sessionMarketContext }); 

List<object> keys = new List<object>(); 

keys.Add(value); 

var methodEntityGet = 
    entityReadRepository.GetType().GetMethod("Find", new Type[] { typeof(object[])}); 

var fromRepo = 
    methodEntityGet.Invoke(entityReadRepository, new object[]{new []{ keys.ToArray()[0]}}); 

值是GUID。我有错误

其中一个主键值的类型与实体中定义的类型不匹配。 调用的目标引发了异常。

+0

为什么key.ToArray()[0]'上的'[0]'? –

+0

'.Find()'寻找一个单一的实体 –

+0

你可能会先告诉你想要实现什么。也许知道这可以帮助我们,而不是试图调试那些可能达不到您要实现的目标的代码。 –

回答

1

您的最后一行应如下所示。您需要明确数组类型,并且不需要创建List

var fromRepo = 
    methodEntityGet.Invoke(entityReadRepository, new object[]{new object []{value}}); 
+0

非常感谢!) –