San*_*rst 28 asp.net asp.net-mvc ado.net
我正在寻找一种使用Classic ADO.Net访问存储过程的方法,因为我是ASP.Net MVC的新手,我不知道如何去做.
大多数示例显示了使用ADO.Net Entity框架的CRUD操作.
Dar*_*rov 50
你可以有一个存储库:
public interface IUsersRepository
{
public User GetUser(int id);
}
Run Code Online (Sandbox Code Playgroud)
然后实现它:
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")),
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后您的控制器可以使用此存储库:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,控制器就不再依赖于数据访问层的实现:无论是使用普通的ADO.NET,NHibernate,EF,还是其他一些ORM,调用外部Web服务,XML,都可以命名.
现在剩下的就是配置你喜欢的DI框架,将存储库的正确实现注入控制器.如果明天您决定更改数据访问技术,没问题,只需编写不同的IUsersRepository接口实现并重新配置您的DI框架即可使用它.无需触摸控制器逻辑.
您的MVC应用程序不再依赖于数据的存储方式.这使得更容易对控制器进行单独测试,因为它们不再紧密耦合到特定数据源.
| 归档时间: |
|
| 查看次数: |
38980 次 |
| 最近记录: |