【问题标题】:call method with params in arguments through reflection c#通过反射c#在参数中调用带有参数的方法
【发布时间】:2016-11-15 23:39:32
【问题描述】:

方法从数据库返回记录。

    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] 上的keys.ToArray()[0]?
  • .Find() 查找单个实体
  • 您可以从说出您想要实现的目标开始。也许知道这会让我们提供帮助,而不是尝试调试甚至可能与您尝试实现的目标不匹配的代码。
  • 现有机制,将数据从xls文件导入db。但它只添加新记录,我无法更新 db thorgh 导入中的记录,因为我有例外,该记录存在于表中。我正在尝试实现类似的机制,它将获取现有记录,修改它并保存在数据库中。我希望“var fromRepo”返回我的实体

标签: c# entity-framework reflection


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 2011-01-26
    • 2015-09-03
    • 1970-01-01
    • 2016-04-25
    • 2020-12-09
    • 2014-04-20
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多