Подтвердить что ты не робот

Использование ASP.Net MVC с классическим ADO.Net

Я ищу способ доступа к хранимым процедурам с помощью Classic ADO.Net, так как я новичок в ASP.Net MVC. Я не знаю, как это сделать.

Большинство примеров показывают операции CRUD с использованием инфраструктуры ADO.Net Entity.

4b9b3361

Ответ 1

У вас может быть репозиторий:

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 ваши контроллеры изолированно, поскольку они больше не жестко связаны с конкретным источником данных.

Ответ 2

Отъезд Dapper-dot-net - это то, что движет этим сайтом - отличное, легкое, основанное на чистом ADO.NET, поддерживает хранимые процедуры очень хорошо - не могу сказать достаточно хороших вещей об этом!

Ответ 3

ASP.NET MVC работает с любой базой данных, которую вы хотите использовать. Вы можете извлекать свои данные любым способом (например, классический ADO.NET) и передавать полученную модель данных в представление. Вам просто нужно указать тип модели в представлении, чтобы он соответствовал объекту, который вы передаете ему.

Ответ 4

Если вы знаете, как это сделать с помощью ADO.NET, вы можете сделать это в ASP.NET MVC (имейте в виду, что это абсолютно разные структуры не имеют зависимости друг от друга).

Вы можете инкапсулировать код DataAccess в Repostitories и использовать эти репозитории в контроллерах;