通过反射c#在参数中使用params调用方法

时间:2016-11-15 15:20:13

标签: c# entity-framework reflection

从数据库返回记录的方法。

    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。我有错误

  

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

1 个答案:

答案 0 :(得分:1)

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

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