1 votes

des classes statiques pour l'accès aux bases de données ?

J'utilise DataClassesDataContext pour mapper toutes les tables de la base de données dans mon application asp.net.

Pour effectuer des opérations CRUD, j'ai créé des classes statiques avec des méthodes, et dans chaque méthode, j'instancie des DataClassesDataContext.

Par exemple :

public static class UserQ
{
    public static User getUserById(int userId)
    {
        DataClassesDataContext db = new DataClassesDataContext();
        var requestedUser = (from u in db.Users
                             where u.User_id == userId
                             select u).First();
        if (requestedUser != null)
            return (User)requestedUser;
        else
            return null;
    }
}

Je ne suis pas sûr que cette façon d'effectuer des opérations de base de données dans une application Web soit sûre ? Si non, pouvez-vous me suggérer un meilleur modèle ?

2voto

Oded Points 271275

As DataClassesDataContext implements IDisposable vous devez l'entourer d'une directive using :

using (DataClassesDataContext db = new DataClassesDataContext())
{
...
}

1voto

kd7 Points 16740

Je vous suggère de jeter un coup d'œil au modèle de référentiel :

1) Exemple 1
2) Exemple 2 (Le premier chapitre du Nerd Dinner de Scott Gu - c'est pour MVC mais le modèle Repository illustré fonctionne sans MVC)

1voto

Sunny Points 3189

Je serais très très prudent quant à l'utilisation de STATIC dans les applications web. Parfois, les bogues sont si subtils que vous passerez beaucoup de temps à les déboguer.

Je pense que bnkdev et Oded ont mis le doigt sur le problème : regardez le modèle de référentiel et enveloppez votre appel contextuel dans une déclaration using...

HTH.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X