Этот запрос LINQ является бизнес-логикой.Проблема в том, что в этом примере он жестко закодирован в контроллере, что делает его привязанным к базе данных.
Вы можете абстрагировать его в интерфейс, который будет выполнять этот запрос, чтобы ваш контроллер больше не зависел от datacontext
.Тогда у вас может быть реализация этого интерфейса, которая будет осуществлять фактический доступ к данным:
Public Interface IBusinessRepository
Function GetQuestions(statusId As Integer) As IEnumerable(Of Question)
End Interface
Public Class BusinessRepositorySql
Implements IBusinessRepository
Public Function GetQuestions(statusId As Integer) As IEnumerable(Of Question) Implements IBusinessRepository.GetQuestions
' TODO: Perform the data access here
Throw New NotImplementedException()
End Function
End Class
Тогда контроллер может использовать бизнес-логику (в этом случае все, что ему нужно, это отфильтровать вопросы по какому-либо условию):
Public Class HomeController
Inherits Controller
Private ReadOnly _repository As IBusinessRepository
Public Sub New(repository As IBusinessRepository)
_repository = repository
End Sub
Public Function Index() As ActionResult
Dim questions = _repository.GetQuestions(1)
Return View(questions)
End Function
End Class
Тогда вы можете создать фабрику пользовательских контроллеров , которая будет внедрять правильную реализацию в контроллер.