Usted podría tener un repositorio:
public interface IUsersRepository
{
public User GetUser(int id);
}
luego implementan:
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")),
}
}
}
}
}
y luego el controlador podría utilizar este repositorio:
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);
}
}
De esta manera el controlador hay Depende más de la implementación de su capa de acceso a datos: ya sea que esté utilizando ADO.NET simple, NHibernate, E F, algún otro ORM, llamando a un servicio web externo, XML, lo que sea.
Ahora todo lo que queda es configurar su marco de DI favorito para inyectar la implementación adecuada del repositorio en el controlador. Si mañana decide cambiar su tecnología de acceso a datos, no hay problema, simplemente escriba una implementación diferente de la interfaz IUsersRepository
y reconfigure su marco DI para usarlo. No es necesario tocar la lógica de tu controlador.
Su aplicación MVC ya no está vinculada a la forma en que se almacenan los datos. Esto hace que sea más fácil probar sus controladores en forma aislada ya que ya no están estrechamente acoplados a una fuente de datos particular.
acaba de vincular estos dos artículos, juntos. http://stackoverflow.com/questions/2243898/displaying-standard-datatables-in-mvc – yedevtxt