IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

Entity et procédure stockée système


Sujet :

Entity Framework

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut Entity et procédure stockée système
    Bonjour,

    Je suis actuellement en train de développer un petit logiciel de type "CRUD" utilisant les technologies WPF et le Framework Entity le tout en .NET 3.5.
    Après avoir suivi de nombreux tutos et avoir fais pas mal de tests, je me heurte à un problème quant aux procédures stockées.

    En effet, j'ai créé une procédure en base qui permet d'ajouter une connexion SQL et un utilisateur de base de données pour un login du domaine dans lequel je travail (Code de la procédure en pièce jointe).

    J'ai aussi joint l'image du mappage de la procédure stockée et de ma table concernée. Il y a également le code source de l'instanciation du contexte et l'utilisation qui déclenche une exception.

    Cette exception est déclenchée lorsque j'utilise la méthode SaveChanges() du contexte. En fait le programme s'exécute normalement quand je supprime les appels aux procédures stockées de sécurité de MS SQL (sp_granlogin,sp_defaultdb...) dans ma procédure personnelle.

    Voici le type d'erreur que j'ai (ex est de type Exception):

    ex.Message
    Une erreur s'est produite lors de la mise à jour des entrées. Pour plus d'informations, consultez InnerException.

    ex.InnerException.Message
    La procédure*'sys.sp_grantlogin' ne peut pas être exécutée dans une transaction.
    La procédure*'sys.sp_defaultdb' ne peut pas être exécutée dans une transaction.
    La procédure*'sys.sp_addrolemember' ne peut pas être exécutée dans une transaction.
    La procédure*'sys.sp_addrolemember' ne peut pas être exécutée dans une transaction.
    Je précise que la procédure fonctionne très bien lorsque je l'utilise en SQL.

    Si quelqu'un à une idée je suis preneur car je commence à m'arracher les cheveux.

    J'espère être assez clair dans mes explications.

    Merci d'avance.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    Quand tu fais un saveChange, il exécute des commandes SQL dans une transaction. A priori, le soucis viens de tes procédures stockée que tu appelles dans ton AddToUtilisateur.

    Cela viens peut-être de la gestion des transactions dans les PS qui sont appellé dans AddToUtilisateur. Mais je suis pas sur

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut
    Merci pour ta réponse.

    En fait j'ai exposé le problème à quelqu'un que je connais et il a trouvé (sur le msdn) qu'on ne peut pas exécuter de procédures stockées (type sp_grantlogin par exemple) dans une transaction utilisateur appelée via EF ou non.

    Voir le lien suivant: http://msdn.microsoft.com/en-us/libr...1(SQL.80).aspx

    J'ai donc dû contourner mon problème par un appel comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
                SqlConnection connex = new SqlConnection("Data Source = Serveur\\Instance; Initial Catalog = BaseDeDonnees; Integrated Security = true");
     
                try
                {
                    connex.Open();
     
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = connex;
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.CommandText = "CreerUtilisateur";
                    cmd.Parameters.AddWithValue("@NomComplet", "Mon Nom");
                    cmd.Parameters.AddWithValue("@NomConnexion", "Domaine\\Utilisateur");
                    cmd.Parameters.AddWithValue("@TypeUtilisateur", 1);
     
                    object temp = cmd.ExecuteScalar();
     
                    if (temp != null)
                    {
     
     
                        int test = int.Parse(temp.ToString());
     
                        MessageBox.Show("Id = " + test.ToString());
                    }
                    else
                    {
                        MessageBox.Show("Utilisateur déjà existant");
                    }
     
     
                    cmd.Dispose();
     
                    if (connex.State == System.Data.ConnectionState.Open)
                        connex.Close();
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
     
                    if (connex.State == System.Data.ConnectionState.Open)
                        connex.Close();
                }
    Je trouve ça plutôt moche mais ça fonctionne. Ce que je ne pige pas c'est la façon dont EF gère cela. La procédure passe en SQL mais pas en C# à cause de la création d'une transaction utilisateur apparemment.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Execution de procédure stockée avec Entity Framework
    Par ambe_fr dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 19/03/2012, 17h43
  2. EFCachingProvider avec Entity Framework 4 et des procédures stockées
    Par aymeric.lagier dans le forum Entity Framework
    Réponses: 2
    Dernier message: 08/07/2010, 19h53
  3. Réponses: 0
    Dernier message: 10/11/2009, 09h30
  4. Procédures stockées : erreur sql système
    Par marina_b44 dans le forum AS/400
    Réponses: 7
    Dernier message: 09/06/2008, 16h26
  5. Réponses: 1
    Dernier message: 14/03/2008, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo