Utilisation ASP.Net MVC avec classique ADO.Net

Je cherche un moyen d'accéder aux procédures stockées en utilisant Classic ADO.Net, puisque je suis nouveau à ASP.Net MVC Je ne sais pas comment s'y prendre.

La majorité des exemples montrent des opérations CRUD utilisant ADO.Net cadre D'entité.

27
demandé sur Sandhurst 2011-07-14 17:42:03

4 réponses

Vous pourriez avoir un référentiel:

public interface IUsersRepository
{
    public User GetUser(int id);
}

Puis implémentez-le:

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")),
                }
            }
        }
    }
}

Et alors votre contrôleur pourrait utiliser ce référentiel:

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 cette façon, le contrôleur ne dépend plus de l'implémentation de votre couche d'accès aux données: si vous utilisez plain ADO.NET, NHibernate, EF, un autre ORM, appelant un service Web externe, XML, vous le nommez.

Maintenant, il ne reste plus qu'à configurer votre framework di préféré pour injecter la bonne implémentation du le dépôt dans le contrôleur. Si demain vous décidez de changer votre technologie d'accès aux données, pas de problème, écrivez simplement une implémentation différente de l'interface IUsersRepository et reconfigurez votre framework DI pour l'utiliser. Pas besoin de toucher votre logique de contrôleur.

Votre application MVC n'est plus liée à la façon dont les données sont stockées. Cela facilite également le test unitaire de vos contrôleurs isolément car ils ne sont plus étroitement couplés à une source de données particulière.

49
répondu Darin Dimitrov 2011-07-14 13:55:54

Découvrez Dapper-dot-net - c'est ce qui motive ce site-excellent, Léger, basé sur pur ADO.NET, prend en charge les procédures stockées très bien-ne peut pas dire assez de bonnes choses à ce sujet!

9
répondu marc_s 2016-09-16 08:53:43

ASP.NET MVC fonctionne avec n'importe quel framework de base de données que vous souhaitez utiliser. Vous pouvez récupérer vos données comme vous le souhaitez (comme classic ADO.NET) et passez le modèle de données résultant à la vue. Il vous suffit de spécifier le type de modèle dans la vue pour correspondre à l'objet que vous lui transmettez.

2
répondu Daniel Young 2011-07-14 13:45:06

Si vous savez comment le faire avec ADO.NET vous pouvez le faire en ASP.NET MVC (soyez conscient, ce sont des frameworks absolument différents n'ont aucune dépendance les uns des autres).

Vous pouvez encapsuler votre code DataAccess dans des référentiels et utiliser ces référentiels, dans des contrôleurs;

1
répondu Alexander Beletsky 2011-07-14 13:45:16