Вы можете начать с некоторой абстракции, указывающей ваше намерение:
public interface IMyRepository
{
SomeModel Get(int id);
}
, затем вы можете написать реализацию, которая будет использовать вашу хранимую процедуру:
public class MyRepositorySql: IMyRepository
{
public SomeModel Get(int id)
{
... call your stored procedure
}
}
, затем спроектировать свой контроллер так, чтобыона принимает эту абстракцию в качестве аргумента:
public class MyController: Controller
{
private readonly IMyRepository _repository;
public MyController(IMyRepository repository)
{
_repository = repository;
}
public ActionResult Index(int id)
{
var model = _repository.Get(id);
return View(model);
}
}
Теперь все, что осталось, - это настроить вашу DI-инфраструктуру для передачи правильной реализации в конструктор контроллера.Как вы можете видеть, контроллер полностью отделен от способа извлечения данных.На самом деле не имеет значения, используете ли вы StoredProcs, какой-либо ORM или что-то еще на своем уровне доступа к данным.