2016-11-15 145 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

非常感謝!) –

相關問題