begin process at 2012 02 09 18:26:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

C# Linq To Entity : Problème d' Ajout/Modification


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C# Linq To Entity : Problème d' Ajout/Modification

lundi 17 novembre 2008 à 18:09:40 | C# Linq To Entity : Problème d' Ajout/Modification

wlad952

Bonsoir à tous ! J'ai un problème au niveau de Linq en C# et je viens de passer ma journée à chercher une solution sans succès. C'est la  raison pour laquelle je me tourne vers ce forum :)

Voilà mon contexte :

J'ai 2 tables qui donnent 2 entities :
Personne(id, nom, idVille (ALLOW NULL))
Ville(id, nom, cp)

Cela génère donc une relation automatique au niveau du diagramme de Classe. Jusque là tout va bien.

Ensuite je propose un formulaire winform à l'utilisateur pour qu'il puisse ajouter une personne et lui rattacher une ville obligatoirement : jusque là tout va bien au niveau objet en mémoire.

C'est là où çà se corse : lorsque je tente d'ajouter la personne à mon contexte cela sort en erreur avec  ce message:

"An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext.  This is not supported."

Et voici le code qui ajoute la personne :

public static int Insert(Person newPerson)
        {
            try
            {
            PartenairesDataClassesDataContext dc = new PartenairesDataClassesDataContext();

         //évite les doublons
                var matched = (from c in dc.Persons
                                         where c.NOM == newPerson.NOM
                                         select c).SingleOrDefault();

                if (matched == null)
                {
                    dc.Persons.InsertOnSubmit(newPerson);
                    dc.SubmitChanges();
                }
                return newPerson.ID;
            }
            catch
            {
                return 0;
            }
        }

Merci pour votre aide.



lundi 17 novembre 2008 à 23:37:08 | Re : C# Linq To Entity : Problème d' Ajout/Modification

Bidou

Administrateur CodeS-SourceS
Bonsoir,
Le message d'erreur a le mérite d'etre assez clair...

Remplace: dc.Persons.InsertOnSubmit(newPerson);
par: dc.Persons.InsertOnSubmit(new Person());

Ca devrait marcher...



-Blog-
-WebSite-
mardi 18 novembre 2008 à 09:22:10 | Re : C# Linq To Entity : Problème d' Ajout/Modification

wlad952

Merci pour ta réponse :)

Avant d'essayer, je tiens à signaler que l'insertion telle qu'elle est faite actuellement fonctionne très bien sans l'implémentation de la VILLE pour la personne.

En effet, avant de passer dans le Insert(Person p) j'affecte les propriétés de la personne dont la Ville :

p.VILLE = combobox.SelectedItem as VILLE

Puis j'exécute l'Insert(p).

Mais si je commente l'affectation de la VILLE pour une personne , l'insert fonctionne très bien ! Il y a juste un <NULL> pour l'idVille de la table Personne : normal.

Sur ce je vais essayer ta solution Bidou.


mardi 18 novembre 2008 à 09:46:11 | Re : C# Linq To Entity : Problème d' Ajout/Modification

wlad952

Bidou : je viens de regarder ton code plus en "profondeur" : pourquoi insérer une nouvelle instance de Person alors que mon objet que je veux insérer est ma Person newPerson ?
mardi 18 novembre 2008 à 13:09:01 | Re : C# Linq To Entity : Problème d' Ajout/Modification

Bidou

Administrateur CodeS-SourceS
Euh, me suis trompé, je voulais mettre ceci:
Essayes de faire newPerson.Ville = new Ville();

Si ça marche c'est parce que tu charges ton entité Ville (celle du combo) avec un autre DataContext...



-Blog-
-WebSite-
mardi 23 décembre 2008 à 15:00:25 | Re : C# Linq To Entity : Problème d' Ajout/Modification

clydislondon

Comment as tu finalement résolu ou contourné ce soucis ?

Merci d'avance
mardi 23 décembre 2008 à 15:25:43 | Re : C# Linq To Entity : Problème d' Ajout/Modification

wlad952

Réponse acceptée !
En faite le problème vient du fait que j'affectais ma ville à l'utilisateur hors de ma méthode Insert.

Conséquence : LINQ crois que la VILLE ne fait plus partie du même contexte que dans ma méthode Insert et tente donc d'insérer ma Ville qui existe en faite déjà.

La solution : réaffecter la bonne ville du bon contexte avant de faire le "InsertOnSubmit"

Exemple :

public static int Insert(Person newPerson)
        {
            try
            {
            PartenairesDataClassesDataContext dc = new PartenairesDataClassesDataContext();

         //évite les doublons
                var matched = (from c in dc.Persons
                                         where c.NOM == newPerson.NOM
                                         select c).SingleOrDefault();

                if (matched == null)
                {
                        //On va rechercher la ville du même contexte
                        var ville = (from v in dc.VILLEs
                                     where v.ID_VILL == newPerson.VILLE.ID_VILL
                                     select v).Single();
                        newPerson.VILLE = ville; //On réaffecte la ville du bon contexte

                    dc.Persons.InsertOnSubmit(newPerson);
                    dc.SubmitChanges();
                }
                return newPerson.ID;
            }
            catch
            {
                return 0;
            }
        }

mardi 23 décembre 2008 à 15:26:43 | Re : C# Linq To Entity : Problème d' Ajout/Modification

wlad952

A toi d'adapter ;)
mardi 23 décembre 2008 à 15:47:54 | Re : C# Linq To Entity : Problème d' Ajout/Modification

clydislondon

Merci
Cela fonctionne effectivement

C'est une bonne solution pour contourner le problème
mais imaginons que j'ai 1000 propriétés comme Ville, cela voudrait dire qu'il faudrait les réassigner une à une avant de faire notre Insert ?

Je pense qu'il doit exister une manière plus 'propre' de résoudre cette problématique, non ?
mardi 23 décembre 2008 à 16:36:05 | Re : C# Linq To Entity : Problème d' Ajout/Modification

wlad952

Effectivement oui il doit exister un moyen ...

Sinon en affectant toutes tes villes juste avant l'insert ? Ou encore utiliser le même DataContext en static dans toute tes méthodes ?

1 2

Cette discussion est classée dans : to, dc, linq, entity, newperson


Répondre à ce message

Sujets en rapport avec ce message

Linq to Dataset et result to DataGridView [ par lemmingperceval ] Hello,J'aimerai effectuer un système de filtre pour un dataGridView.Je pense faire une requète sur le dataSet.DataTable puis de mettre le résultat dan Linq To Sql [ par 24 ans ] Salut tous le mondeJ ai un petit soucis qui est le suivant :Probleme de fusion de deux Table en une seul table linqvoici le code que j ai ecrit:Dal d1 Linq to XML [ par DCWeb ] Bonjour,J'aimerai savoir si ça pose un problème de charger un fichier XML de plusieurs dizaines de Go afin de le traiter avec LinqCordialementDCWeb Filtre sur une association en linq to sql [ par SharpMao ] Salut à vous tous,J'ai un petit problème en linq to sql.J'ai deux tables qui sont reliées, A->B. Mais en plus de l'association sur la clé primaire, j' Linq to XML [ par shadow1779 ] Bonjour,on trouve de nombreux exemple de Linq to XML sur le net avec la création d'un xml après une requète effectuée avec Linq, néanmoins je recherch Linq to XSD [ par SharpMao ] Hello,En début d'année, j'ai vu un ou deux articles parlant de Linq to XSD. Il y a même une version alpha à télécharger< Linq to sql [ par laymouna98 ] salutj'ai fait un pteit exemple avec linq et sql servermaintenent je veut bien changer la base de données au lieu de sql server en oracleest ce que je Requetes Linq to Entity [ par Donpi ] Alors c'est l'histoire d'un manchot qui développe en C# avec linq et qui en a un peu marre que rien ne marche...Le problème est pas très compliqué, j' PROBLEME LINQ to DATASET URGENT : insérer, modifier, supprime [ par Vince62290 ] Bonjour à tous, je dois résoudre absolument mon problème cette semaine (fin de mon projet).Comment peut-on insérer, modifier, supprimer une ligne dans linq to sql [ par laymouna98 ] salut à tous je veut ajouter à mon projet un fichier de type LinkObjets, c'est un fichier qui à l'extension .dbml, mais le problème c'est ce modèle n'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,638 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales