2015-02-06 2 views
0

Я работаю над веб-приложением asp.net mvc. и у меня есть следующий метод репозитория ,, где я буду проходить в .INCLUDE() динамически: -Вызов динамического. Включить список

public async Task<SecurityRole> FindSecurityRole(int id,string path="") 
       { 
        return await context.SecurityRoles.Include(path).SingleOrDefaultAsync(a2 => a2.SecurityRoleID == id); 
} 

Теперь внутри моего контроллера я хочу вызвать выше метод следующим образом: -

await uniteofwork.SecurityRoleRepository.FindSecurityRole(id.Value,) 

, но я не уверен, что такое apporachies, за которыми я могу следовать, чтобы передать свойства? Thanks

ответ

1

Вы можете цеплять звонки на такие вещи, как Include, на несколько строк, сохраняя результат в переменной. Ничто не ударит по вашей базе данных, пока вы не вызовете оценочное выражение, например SingleOrDefaultAsync.

var query = context.SecurityRoles; 
foreach (var include in path.Split(',', StringSplitOptions.RemoveEmptyEntries)) 
{ 
    query = query.Include(include); 
} 

return await query.SingleOrDefaultAsync(a2 => a2.SecurityRoleID == id); 

Разделение строки позволяет передавать сразу несколько иерархии, разделенных запятой.

+0

спасибо, и как я буду называть вышеупомянутый метод, должен ли я передать его внутри строки «NavigationProperty1, NavigationProperty2»? например, «репозиторий.Call (1,« NP1, NP »»), « –

+0

Да, точно. Include принимает либо строковое, либо лямбда-выражения. –

+0

, но как я могу передать выражение lamdba в моем случае, потому что это позволит мне предотвратить жесткое кодирование свойств навигации .. но я не уверен, как я могу передать свойства навигации как выражение lambada .. –

Смежные вопросы