Я ищу способ доступа к хранимым процедурам с помощью Classic ADO.Net, так как я новичок в ASP.Net MVC. Я не знаю, как это сделать.
Большинство примеров показывают операции CRUD с использованием инфраструктуры ADO.Net Entity.
Я ищу способ доступа к хранимым процедурам с помощью Classic ADO.Net, так как я новичок в ASP.Net MVC. Я не знаю, как это сделать.
Большинство примеров показывают операции CRUD с использованием инфраструктуры ADO.Net Entity.
У вас может быть репозиторий:
public interface IUsersRepository
{
public User GetUser(int id);
}
затем выполните его:
public class UsersRepository: IUsersRepository
{
private readonly string _connectionString;
public UsersRepository(string connectionString)
{
_connectionString = connectionString;
}
public User GetUser(int id)
{
// Here you are free to do whatever data access code you like
// You can invoke direct SQL queries, stored procedures, whatever
using (var conn = new SqlConnection(_connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id, name FROM users WHERE id = @id";
cmd.Parameters.AddWithValue("@id", id);
using (var reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
return null;
}
return new User
{
Id = reader.GetInt32(reader.GetOrdinal("id")),
Name = reader.GetString(reader.GetOrdinal("name")),
}
}
}
}
}
а затем ваш контроллер может использовать этот репозиторий:
public class UsersController: Controller
{
private readonly IUsersRepository _repository;
public UsersController(IUsersRepository repository)
{
_repository = repository;
}
public ActionResult Index(int id)
{
var model = _repository.GetUser(id);
return View(model);
}
}
Таким образом, контроллер больше не зависит от реализации вашего уровня доступа к данным: используете ли вы простые ADO.NET, NHibernate, EF, другие ORM, вызывая внешнюю веб-службу, XML, вы называете ее.
Теперь все, что осталось, - настроить вашу любимую инфраструктуру DI, чтобы внедрить правильную реализацию репозитория в контроллер. Если завтра вы решите изменить технологию доступа к данным, не проблема, просто напишите другую реализацию интерфейса IUsersRepository
и перенастройте свою инфраструктуру DI, чтобы использовать ее. Не нужно прикасаться к логике контроллера.
Ваше приложение MVC больше не связано с тем, как хранятся данные. Это также упрощает unit test ваши контроллеры изолированно, поскольку они больше не жестко связаны с конкретным источником данных.
Отъезд Dapper-dot-net - это то, что движет этим сайтом - отличное, легкое, основанное на чистом ADO.NET, поддерживает хранимые процедуры очень хорошо - не могу сказать достаточно хороших вещей об этом!
ASP.NET MVC работает с любой базой данных, которую вы хотите использовать. Вы можете извлекать свои данные любым способом (например, классический ADO.NET) и передавать полученную модель данных в представление. Вам просто нужно указать тип модели в представлении, чтобы он соответствовал объекту, который вы передаете ему.
Если вы знаете, как это сделать с помощью ADO.NET, вы можете сделать это в ASP.NET MVC (имейте в виду, что это абсолютно разные структуры не имеют зависимости друг от друга).
Вы можете инкапсулировать код DataAccess в Repostitories и использовать эти репозитории в контроллерах;