Вы не предоставили никакой информации об этом Emp Table
.Правильный способ сделать это в ASP.NET MVC - это абстрагировать доступ к данным в репозиторий и использовать этот репозиторий с вашего контроллера:
public interface IEmployeesRepository
{
IEnumerable<Employee> GetEmployees();
}
И теперь ваш контроллер становится:
public class HomeController: Controller
{
private readonly IEmployeesRepository _repository;
public HomeController(IEmployeesRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
var model = new MyViewModel
{
Employees = _repository.GetEmployees()
};
return View(model);
}
}
Как вы можете видеть, доступ к данным удален от контроллера, и на самом деле его не волнует, откуда эти сотрудники.Именно в этот момент это перестает быть вопросом, связанным с ASP.NET MVC, и становится вопросом о том, как реализовать этот интерфейс с использованием некоторой технологии доступа к данным.
Предположим, что вы использовали Linq to Entities как ORM,Ваша реализация может выглядеть так:
public class EmployeesRepositorySql: IEmployeesRepository
{
public IEnumerable<Employee> GetEmployees()
{
using (var db = new EmployeesDbContext())
{
return db.Employees;
}
}
}
ОК, так что, как вы можете видеть, мы ввели класс контекста данных, который автоматически генерируется Visual Studio при добавлении новой сущности из существующей базы данных.Если вы не знакомы с Entity Framework, вы можете прочитать некоторые учебные пособия по началу работы .
или если вы предпочитаете использовать ADO.NET напрямую:
public class EmployeesRepositorySql: IEmployeesRepository
{
public IEnumerable<Employee> GetEmployees()
{
using (var conn = new SqlConnection("SOME CONNECTION STRING"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT Id, Name FROM Employees;";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
yield return new Employee
{
Id = reader.GetString(0),
Name = reader.GetString(1)
};
}
}
}
}
}
Последняя оставшаяся часть - дать нашему контроллеру команду использовать эту конкретную реализацию хранилища.Это может быть достигнуто с помощью структуры DI.Вот статья , объясняющая это.