使用ASP.Net MVC与经典ADO.Net

我正在寻找一种方法来访问存储过程使用经典的ADO.Net,因为我是新的ASP.Net MVC我不知道如何去。

大多数示例显示使用ADO.Net Entity框架的CRUD操作。

解决方法

你可以有一个存储库:
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,调用外部Web服务,XML,都是您的名字。

现在剩下的就是配置你最喜欢的DI框架,注入到控制器的存储库的正确实现。如果明天你决定改变你的数据访问技术,没有问题,只需写一个不同的IUsersRepository接口的实现,并重新配置你的DI框架使用它。无需触摸控制器逻辑。

您的MVC应用程序不再与数据存储的方式相关联。这使得更容易单独测试您的控制器,因为它们不再紧密耦合到特定的数据源。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...