Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > Entity Framework
Entity Framework Forum d'entraide sur le développement avec le modèle d'accès aux données Entity Framework de Microsoft.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/10/2012, 12h00   #1
didine44
Futur Membre du Club
 
Femme Amandine
Développeur .NET
Inscription : janvier 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Âge : 29
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é.
didine44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 15h48   #2
didine44
Futur Membre du Club
 
Femme Amandine
Développeur .NET
Inscription : janvier 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Âge : 29
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
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.
didine44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 15h58   #3
didine44
Futur Membre du Club
 
Femme Amandine
Développeur .NET
Inscription : janvier 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Âge : 29
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
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.
didine44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 21h34   #4
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 909
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 : 909
Points : 1 454
Points : 1 454
Tu utilises entity framework?
Comment as tu crée ton edmx?
youtpout978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2012, 10h03   #5
didine44
Futur Membre du Club
 
Femme Amandine
Développeur .NET
Inscription : janvier 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Âge : 29
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
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.
didine44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2012, 16h32   #6
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 909
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 : 909
Points : 1 454
Points : 1 454
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..)
youtpout978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2013, 11h59   #7
pClement
Membre du Club
 
Homme Paul CLEMENT
et autre ;)
Inscription : 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
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.
pClement est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h50.


 
 
 
 
Partenaires

Hébergement Web