begin process at 2010 02 10 12:48:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Base de données

 > 

SQL Server

 > 

Copie d' objet Linq


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

Copie d' objet Linq

lundi 6 octobre 2008 à 14:52:18 | Copie d' objet Linq

jfcecile


Bonjour je cherche à faire une copie d'une ligne d'un table, par le biais de linq,

j'ai essayé d'implémenter la fonction clone dans la classe image de ma base de donnée génerée par sqlmetal
  public Paste()
    {
        this._Setup_Job = default(EntityRef<Setup_Job>);
        OnCreated();
    }

    public object Clone()
    {
       
        return MemberwiseClone();
    }.....

La copie se fait bien mais une exception est générée lors de l'execution apres l'insert de la nouvelle ligne
( Table Paste liée à la table Setup_Job )
private void copyProcessType(Setup_Job New_Setting,Setup_Job Old_Setting)
    {
        int indexPaste = 0;

        foreach (var Old_Paste in Old_Setting.Paste)
        {

           Paste New_Paste = new Paste();

            New_Paste = (Paste)Old_Paste.Clone();

            New_Paste.Process_Type_Id = 0;

            New_Setting.Paste.Insert(indexPaste, New_Paste);
 
            indexPaste++;
        }

    }
*

Pb sur le deuxième passage du foreach

Détails de l'exception: System.InvalidOperationException: EntitySet a été modifié durant l'énumération.
foreach (var Old_Paste in OldPaste)
Ligne 192 : {
....


si je ne fais pas le clone l'insertion se fait parfaitement
mais comme j'ai pas trop envie de copier les champs un par un.

Si vous avez une solution pour copier une ligne de table avec linq

Merci d'avance




mardi 7 octobre 2008 à 07:21:37 | Re : Copie d' objet Linq

xmox667

Membre Club
Salut,
Le MemberwiseClone te créé un nouvel objet qui pointe sur l'ancien (Shallow copy) donc en réalité tu as deux objet lié au même contenu.
Je pense que tu dois faire un Deep copy dans la méthode clone. Cela va te créer un nouvel objet indépendant de la source. Tu auras 2 objets que tu peux modifier indépendamment.

Voici le code pour faire un deep copy:

public object Clone()
{
  using (MemoryStream mem = new MemoryStream())
   {
    Serializer.Serialize(mem, this);
    object tempObj = Serializer.Deserialize(mem);
    return tempObj;
   }
}


Dans ta boucle foreach tu fais ceci:
Paste New_Paste = (Paste)Old_Paste.Clone();

A+





mardi 7 octobre 2008 à 09:30:18 | Re : Copie d' objet Linq

jfcecile


merci pour ta réponse,
j'essaie de l'implémenter
mais je n'arrive pas à trouver la definition de serializer


jeudi 9 octobre 2008 à 08:44:02 | Re : Copie d' objet Linq

xmox667

Membre Club
Salut,
Désoler pour l'oublie:
BinaryFormatter Serializer = new BinaryFormatter();

Une autre exeple de deep copy:

publicobject Clone()

    {

        MemoryStream ms = new MemoryStream();

        BinaryFormatter bf = new BinaryFormatter();

        bf.Serialize(ms, this);

        ms.Position = 0;

        object obj = bf.Deserialize(ms);

        ms.Close();

        return obj;

    }


A+




Cette discussion est classée dans : ligne, table, copie, paste, old


Répondre à ce message

Sujets en rapport avec ce message

ligne suivante et pré. d'une table ds une BDD Access [ par Blacknight91titi ] Bl@cknight91TitiBonjour,J'aimerai savoir s'il existe des méthodes pour récupérer la row suivante ou précédente par ra dataset [ par kooljy ] Bonjour,J'ai plusieurs problème au niveau du dataset.J'ai chargé une table de ma base de données dans un dataset.Je souhaite maintenant 3 choses :- Aj Violation d'acces concurrentiel sur adapterUpdate [ par Kleidp ] Bonsoir,je vous expose mon problème:Apres avoir ajouté une nouvelle ligne dans ma table grâce à un CurrencyManager, je fais un update grâce a un adapt listview [ par BAHROUNRABII ] svp  , comment recupéré l'indice de ligne selectioner ,comment récupérer les valeurs des cellules de meme ligne  de la listview (plusieures colones)et comment supprimer le derniere ligne de ma table ? [ par prodotnet ] comment supprimer le derniere ligne de ma table  sans savoir le nombre de ligne qu'on est ??merci bien de me repondre ajouter ligne dynamiquemet textBox [ par GranPicS ] Bonjour, J'aimerais savoir s'il est possible de rajouter des lignes dynamiquement sur une textBox.Je m'explique:Je développe un webService qui doit ré Trier une DATAGRIDWIEW en C# ? [ par RouessayLuc ] Amis développeuses et développeurs bonjour, Je viens a l'instant de m'inscrire sur ce riche site qui s'avère être un outil complémentaire a un dévelop Ajout DataRow dans une Table [ par drcmomo ] Bonjour tout le monde, J'espére que vous passez une bonne fête de noel Je suis bloqué sur un truc qui peut être trés simple , mais je suis bloqué. C# et ado.net comment inserer une ligne dans ma table ? [ par prodotnet ] Bonjour a tous , je suis débutant en C# et je cherche comment insérer une ligne dans ma table "famille" qui contient 2 colonnes "id" et "nom" sachant


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,468 sec (3)

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