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

C# Discussion :

Entity Framework et insertion d'objet


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Par défaut Entity Framework et insertion d'objet
    Bonjour,

    alors voila le contexte:

    Mes tables:



    Le code:

    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
    for (int cptEvent = 0; cptEvent < lstOfEvent.Count; cptEvent++)
                        {
                            if (lstOfEvent[cptEvent].Type == "Identify")
                            {
                                for (int cptResult = 0; cptResult < lstOfEvent[cptEvent].Event_Result.Count; cptResult++)
                                {
                                    try
                                    {
                                        lstOfEvent[cptEvent].Event_Result.ElementAt(cptResult).Event_Strategy = db.Event_Strategy.First(str => str.StrategyContent == partitionString);
                                    }
                                    catch
                                    {
                                        Exception up = new Exception("Strategy not found in the database");
                                        throw up;
                                    }
                                }
                      }
    }
    Et maintenant le probleme:

    Dans ma table Event_Strategy quand je fais un SaveChanges() je me retrouve avec 10 lignes Strategy_name= null et StrategyContent = null et une ligne qui correspond bien au resultat attendu pour 11 Event_Results.

    PS: les 11 resultats pointent bien vers la bonne strategy ( l'id de Event_Strategy_Id est le bon pour les 11)

    je ne vois vraiment pas pourquoi j'ai ces 10 lignes Null qui s'ajoutent..

    Si vous ne comprenez pas ou s'il vous manque des infos demandez je suis vraiment bloqué la :/

    Merci !!

  2. #2
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    ça serait pas mal de réécrire ton code avec des foreach
    Sinon faut voir le code qui créer les éléments de lstOfEvent et le code de sauvegarde saveChanges.
    En plus que se passe-t-il si lstOfEvent[cptEvent].Type != "Identify" ?

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Par défaut
    Salut NicoL__ ,

    pour la reecriture j'ai essayé le resultat est exactement le meme,

    Pour le code du SaveChanges():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lstOfEvent.ForEach(f => db.Events.AddObject(f));
    db.SaveChanges();
    Et pour la creation des Events j'en ai beaucoup mais rien de special: je crée un nouvel Event et j'affecte des valeurs et je les ajoute a la liste.

    Et pour ta derneire question si le type n'est pas Identify je n'ai pas d' Event_Result donc pas ce problème

    Merci pour ta réponse,

  4. #4
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    La réécriture avec les foreach c'est juste pour que ça soit plus lisible.

    Je dirais que les Event_Strategy ont été créer en même temps que les Event_Result, puis est assigner un Event_Strategy à l'Event_Result ça n'empêche que Entity Framework a été notifier de créer une nouvel Event_Strategy.
    Pour verifier cela un log ou un debug ou une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(lstOfEvent[cptEvent].Event_Result.ElementAt(cptResult).Event_Strategy != null)
    {
         Exception up1 = new Exception("new empty Strategy created... Oups ");
         throw up1;
    }
    lstOfEvent[cptEvent].Event_Result.ElementAt(cptResult).Event_Strategy = db.Event_Strategy.First(str => str.StrategyContent == partitionString);
    pour verifier le contenu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stOfEvent[cptEvent].Event_Result.ElementAt(cptResult).Event_Strategy

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                        foreach (Event evt in lstOfEvent.Where(f => f.Type == "Identify"))
                        {
                            foreach (Event_Result evtres in evt.Event_Result)
                            {
                                if (evtres.Event_Strategy != null)
                                    throw new Exception("Strategy already assigned");
                            }
                        }
    Voila le code que j'ai utilisé avant de commencer a faire toutes mes manips et il se trouve que j'ai des exceptions qui sont levées.

    et je me demande si mon probleme ne viendrait pas de ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public partial class Event_Strategy : EntityObject
        {
            public PartitionStrategy NonSerializedStrategy { get; set; }
        }

    car dans mon code quand je crée un event result j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                           Event_Result rst = new Event_Result()
                            {
                                Score = SingleMatch.Score,
                                Person_ID = SingleMatch.SubjectRef.ToString(),
                                Decision = (bool)SingleMatch.IsMatch,
                                Event_Strategy = new Event_Strategy() { NonSerializedStrategy = SingleMatch.Strategy }
                            };

    Si j'ai bien compris ton raisonnement pour toi le pb pourrait venir de la non ?

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Par défaut
    NicoL__ ton hypothese etait la bonne,
    je pensais qu'en appelant pas le savechanges la strategy n'etait pas créée puisque je reaffectais le Event_Strategy avant mais ca n'a pas l'air d'etre le cas.

    En tout cas un grand merci.

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

Discussions similaires

  1. WCF RIA Services/Entity Framework, perte des objets connexes
    Par jeanjean40 dans le forum Services Web
    Réponses: 3
    Dernier message: 18/09/2012, 13h17
  2. [Optimisation] Insert avec Entity Framework
    Par Er3van dans le forum Entity Framework
    Réponses: 12
    Dernier message: 12/05/2011, 13h03
  3. [Entity Framework] Insertion de donnée avec LINQ to Entities
    Par Leelith dans le forum Framework .NET
    Réponses: 15
    Dernier message: 05/11/2009, 22h56
  4. [Entity Framework] Insert avec clé étrangère
    Par Yoshio dans le forum Framework .NET
    Réponses: 8
    Dernier message: 27/03/2009, 17h33

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