Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Futur Membre du Club
    Femme Profil pro Amandine
    Développeur .NET
    Inscrit en
    janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Femme Amandine
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2007
    Messages : 56
    Points : 15
    Points
    15

    Par défaut ObjectContext.SaveChanges() erreur à la création

    Bonjour à tous,

    Voici mon problème :
    Je souhaite sauvegardé un objet passé en paramètre de ma fonction.
    Cet objet est initialisé et j'initialise d'autres champs qui ne peuvent être null.
    Lorsque je sauvegarde, j'ai le message d'erreur suivant :
    "Cannot insert the value NULL into column 'CreatedDate', table 'TORDB_DEVT.dbo.Sheet'; column does not allow nulls. INSERT fails.
    The statement has been terminated."

    Voici mon code :
    Code :
    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
     
            public bool SaveSheet(Sheet sheetToSave)
            {
                bool result = false;
     
                using (var db = new DbTORContainer())
                {
                    try
                    {
                            sheetToSave.CreatedDate = DateTime.Now;
                            sheetToSave.CreatedUser = sheetToSave.CreatedUser;
                            if (sheetToSave.Guid == Guid.Empty) sheetToSave.Guid = Guid.NewGuid();
                            sheetToSave.ModifiedDate = DateTime.Now;
                            sheetToSave.ModifiedUser = sheetToSave.ModifiedUser;
     
                            db.Sheet.AddObject(sheetToSave);
                            db.SaveChanges();
                        result = true;
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                }
                 return result;
           }
    En regardant ce qu'il y a dans le cache de mon container, j'ai un seul objet à sauvegarder et les champs sont correctement initialisés.

    Je n'ai pas d'objet à modifier.

    Avez-vous une idée, ou rencontré ce problème ?

    Merci pour l'aide apporté.

  2. #2
    Futur Membre du Club
    Femme Profil pro Amandine
    Développeur .NET
    Inscrit en
    janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Femme Amandine
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2007
    Messages : 56
    Points : 15
    Points
    15

    Par défaut

    J'ajoute quelques précisions :
    J'ai mis les champs non nullable nullable, histoire de voir ce qui se passe.
    Résultat, l'objet s'enregistre en base, excepté pour les champs CreatedDate, ModifiedDate et Guid.

    Ils sont bien initialisés avant de passer dans le SaveChanges(), l'enregistrement se fait.
    Quand je regarde dans ma BDD, les champs CreatedDate, ModifiedDate et Guid sont à NULL.

    Je me suis dit qu'il y a peut-être une procédure stockée dans SQL, mais je n'ai rien trouvé. Y-a-t-il possibilité de voir s'il en existe une sur un champ donné ?

    Sinon, j'utilise le framework 4, le générateur POCO avec support WCF.

  3. #3
    Futur Membre du Club
    Femme Profil pro Amandine
    Développeur .NET
    Inscrit en
    janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Femme Amandine
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2007
    Messages : 56
    Points : 15
    Points
    15

    Par défaut

    Bon, finalement, il n'y a que les dates qui ne passent pas.
    Le Guid est bien initialisé dans la table.

    Je pense alors à un problème de conversion, je regarde de ce coté sur le net.

  4. #4
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    Tu utilises entity framework?
    Comment as tu crée ton edmx?

  5. #5
    Futur Membre du Club
    Femme Profil pro Amandine
    Développeur .NET
    Inscrit en
    janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Nom : Femme Amandine
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2007
    Messages : 56
    Points : 15
    Points
    15

    Par défaut

    Salut !

    Oui, j'utilise Entity Framework.
    Pour l'edmx, je ne sais pas comment il a été fait, j'ai repris le projet.
    Par contre, chaque fois qu'une modification est faite sur la base, je met à jour le model à partir de la base (via clic droit sur le model)

    Ensuite je génère le code via "ADO.NET C# POCO Entity Generator With WCF Support".

    C'est un peu pour ça que je trouve étonnant que je n'arrive pas à entrer des dates.

    N'ayant pas vraiment le temps de chercher, j'ai fait au plus simple en mettant des triggers sur la base.

    Par contre, si quelqu'un a rencontré ce problème et l'a résolue, je veux bien connaitre la réponse

    Merci de t'être penché sur mon problème.

  6. #6
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    Avec Sql Profiler (si tu as Microsoft SqlServer) tu peux voir la requête exécutée au niveau de ton SGBD, donc savoir si tes dates sont présentes à ce moment là et en déduire si le problème vient du SGBD ou de ton application.

    (Je tenterais aussi de supprimer la table de l'edmx et de la recréer des fois que..)

  7. #7
    Membre du Club
    Homme Profil pro Paul CLEMENT
    et autre ;)
    Inscrit en
    mai 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul CLEMENT
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : et autre ;)
    Secteur : Finance

    Informations forums :
    Inscription : mai 2008
    Messages : 44
    Points : 64
    Points
    64

    Par défaut

    Salut,

    J'ai eu le problème en changeant un champs de calculé à stocké, vérifie dans ton modele .edmx que le champ a bien la propriété "StoreGeneratedPattern" à "none"(j'imagine que chez toi elle est à computed).
    N'oubliez pas de mettre un titre explicite et précis ainsi que le tag [RESOLU] afin d'aider les gens qui pourraient avoir le même problème que vous.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •