Bonjour,

J'ai deux tables identiques : A et B. (Par exemple, des facturiers)

Je permets l'importation d'objets de A vers B (par exemple: un client)

Si je fais un B.addToClient, ça ne fonctionne pas, puisque le client lu sur A reste attaché à A.

Je n'ai trouvé comme méthode que ceci :

- Créer un nouveau client
- Copier tous les champs du client lu dans A vers le nouveau client
- Faire un addToClient avec le nouveau client
- Puis B.SaveChanges()

Ca fonctionne, mais c'est lourd de recopier tous les champs du client.

J'ai essayé diverses méthodes, en utilisant detach et attach par exemple, mais à chaque fois j'obtiens une erreur (différente).

Ma question est : y-a-t-il un moyen de récuperer un élément d'une table d'une base A, de lui modifier certains champs (sans influencer la base A), et de sauver l'élément modifié dans B, sans devoir recopier tous les champs non modifiés?

Bref un truc du genre, travaillant uniquement sur le client lu, sans en créer un clone :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
var clientimport = (from c in A.Client
                          where c.Id = identificateur
                          select c).FirstOrDefault();
 
clientimport.Id = nouvelId;
 
B.AddToClient(clientimport);
SaveChanges();
Mais complété pour que ça fonctionne réellement.

Pour l'instant, je fais un truc du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
var clientimport = (from c in A.Client
                          where c.Id = identificateur
                          select c).FirstOrDefault();
 
clientExport = new Client();
 
clientExport.copieAPartirDe(clientImport);  // copie bêtement tous les champs
clientExport.Id = nouvelID
B.AddToClient(clientExport);
SaveChanges();

Merci d'avance
Claude