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

Framework .NET Discussion :

[Entity Framework] Insert avec clé étrangère


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut [Entity Framework] Insert avec clé étrangère
    Bonjour,

    Alors, j'utilise l'Entity Framework et l'ADO.NET Data Service pour la gestion de ma db.
    Je n'arrive pas à insérer un tuple. A chaque coup il me sort une exception.

    Voici l'exception :



    Voici le schéma simplifié :



    Je suis dans un projet Silverlight. Quand je lance l'application j'initialise les champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.Database = new JobHuntersExtEntities(new Uri("../WebDataService.svc", UriKind.Relative));
                this.Database.SaveChangesDefaultOptions = SaveChangesOptions.Batch;
                this.Database.MergeOption = MergeOption.AppendOnly;
    Ensuite toujours dans l'initialisation je lance un handler que j'utilise pour récupérer une variable de session venant d'un projet asp.net lié (enfin c'est pas très important ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    this.CompanyId = new Guid(e.Result.ToString());
     
                // Récupération de l'objet de l'entreprise
                var queryCompany = (from c in this.Database.Companies.Expand("Ads")
                                   where c.Id == this.CompanyId
                                   select c) as DataServiceQuery<Company>;
     
                queryCompany.BeginExecute(
                    (ar) => this.Company = queryCompany.EndExecute(ar).First<Company>(),
                    null);
    La valeur de this.Company est bien différente de null et ce à quoi je m'attends.

    Quand je clique sur le bouton de mon formulaire pour ajouter le tuple à la db :
    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
    private void UiButtonSubmit_Click(object sender, RoutedEventArgs e)
            {
                // Date de publication
                DateTime publication;
                if (this._uiDatePickerPublication.SelectedDate == null)
                    publication = DateTime.Now;
                else
                    publication = (DateTime)this._uiDatePickerPublication.SelectedDate;
                
                // Ajout de l'annonce
                Ads ad = new Ads();
                ad.Title = this._uiTextBoxTitle.Text;
                ad.Description = this._uiTextBoxDescription.Text;
                ad.DateCreation = DateTime.Now;
                ad.DatePublication = publication;
                ad.Validity = Int16.Parse(this._uiComboBoxValidity.SelectionBoxItem.ToString());
                ad.Salary = Decimal.Parse(this._uiSalary.Text);
                ad.ContractType = (ContractType)this._uiComboBoxType.SelectedItem;
                ad.Company = this.Company;
                this.Database.AddToAds(ad);
                this.Database.AddLink(ad, "Company", this.Company);
                
                this.Database.BeginSaveChanges(SaveChangesOptions.Batch, (asyncResult) =>
                {
                    try
                    {
                        this.Database.EndSaveChanges(asyncResult);
                        MessageBox.Show("Ok");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.InnerException.Message);
                    }
                }, null);
    
            }
    L'exception est lancée dans le BeginSaveChanges.

    J'ai essayé sans et avec le this.Database.AddLink(ad, "Company", this.Company); mais le résultat est le même, il me balance l'exception.


    Est ce que quelqu'un sait comment faire ? Surement un problème avec l'objet this.Company qui n'a pas les bonne référence mais je ne vois pas comment faire autrement.


    Yoshio.

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Personne n'a une idée ?

    Ca doit être assez commun comme opération pourtant.

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Et si tu ajoutes ton Ads depuis ta company :

    Company.Ads.add(tonads) et que tu save Company plutôt que Ads ?

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    J'ai plus d'exception, mais je n'ai quand même rien dans la base de donnée.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Essayes, mais regardes si j'ai bien compris la syntaxe..

    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
                DateTime publication;
                if (this._uiDatePickerPublication.SelectedDate == null)
                    publication = DateTime.Now;
                else
                    publication = (DateTime)this._uiDatePickerPublication.SelectedDate;
                
                // Ajout de l'annonce
                Ads ad = new Ads();
                ad.Title = this._uiTextBoxTitle.Text;
                ad.Description = this._uiTextBoxDescription.Text;
                ad.DateCreation = DateTime.Now;
                ad.DatePublication = publication;
                ad.Validity = Int16.Parse(this._uiComboBoxValidity.SelectionBoxItem.ToString());
                ad.Salary = Decimal.Parse(this._uiSalary.Text);
                ad.ContractType = (ContractType)this._uiComboBoxType.SelectedItem;
                this.Company.Ads.Add(ad)
                /*this.Database.AddToAds(ad);
                C'est normalement inutile de l'attacher au context, vu que tu l'attaches à une entité existante : company
                this.Database.AddLink(ad, "Company", this.Company);*/
                
                this.Database.BeginSaveChanges(SaveChangesOptions.None, (asyncResult) =>
                {
                    try
                    {
                        this.Database.EndSaveChanges(asyncResult);
                        MessageBox.Show("Ok");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.InnerException.Message);
                    }
                }, null);

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Même erreur.

Discussions similaires

  1. [Optimisation] Insert avec Entity Framework
    Par Er3van dans le forum Entity Framework
    Réponses: 12
    Dernier message: 12/05/2011, 13h03
  2. [Entity Framework] Problème avec le Designer
    Par farfadet dans le forum Framework .NET
    Réponses: 16
    Dernier message: 18/02/2010, 13h13
  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. Réponses: 2
    Dernier message: 06/04/2009, 15h40
  5. Insert avec zend framework
    Par rugby_roux dans le forum Zend
    Réponses: 1
    Dernier message: 30/01/2007, 17h22

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