2010-12-08 66 views
2

J'ai besoin de votre aide beaucoup. Je voudrais mettre à jour l'objet créé dans un autre datacontext; Voici mon code. Insérer déclaration fonctionne bien, mais je ne peux pas écrire du code pour la mise à jourobjet de mise à jour créé dans un autre datacontext

var dataContext = new ReconNewDataContext();   
     if (Id == 0) 
     { 
      var item = this; 
      dataContext.RequestIO.InsertOnSubmit(item); 
      dataContext.SubmitChanges(); 
      Id = item.Id; 
     } 
     else 
     { 
      var item = this; 
      //update object 
     }   

J'ai lu Linq2SQL: Update object not created in datacontext

J'ai essayé d'utiliser .Attach (ce) .Attach (cela, vrai) .Attach (this, oldObjectFromBase) mais j'ai toujours des erreurs.

Je sais que je peux obtenir un objet de la base de données et transférer manuellement des données à partir d'un objet modifié, mais il y aura de nouveaux champs. Cela signifie que je dois toujours ajouter ces nouveaux champs dans la méthode Save().

Existe-t-il une "belle" méthode pour mettre à jour un objet créé dans un autre contexte de données?

+0

Je viens de poster une question similaire parce que j'ai vu cette question posée au moins 20 fois et il n'y a pas une seule réponse "correcte". Pas de "belle" méthode que j'ai trouvée. Cela nous fait a) commencer à devenir un peu fou et b) commencer à remettre en question la sagesse d'utiliser Linq To Sql dans mon dépôt. Est-ce que EF est mieux à mettre à jour les données déconnectées? Y a-t-il une meilleure approche que je peux utiliser dans mes dépôts? Je voudrais avoir une réponse pour vous mais je suis toujours en chercher un moi-même. :( – beaudetious

+0

Je me pose la même question ... Nhibernate m'aurait facilité la vie ... – Haroon

Répondre

0

Vérifiez cet article: http://omaralzabir.com/linq_to_sql__how_to_attach_object_to_a_different_data_context/

Aussi, dans votre exemple, pour la mise à jour, essayez de faire:

var item = new ObjectBeingUpdated(); 
//copy over properties from old object to new object, make sure pk's match 

//Attach this new object 

Quelque chose de semblable travaillé pour mon collègue, je crois.

MISE À JOUR: Check this out pour plus d'informations sur attach: http://blogs.msdn.com/b/dinesh.kulkarni/archive/2007/10/08/attach-if-you-have-something-detached.aspx

+0

// Copier les propriétés d'un ancien objet vers un nouvel objet, s'assure que le pk correspond Comme je l'ai déjà dit, ça marchera mais n'est pas "beau" façon.Que est sur 42 champs dans la table? Bien sûr, je peux utiliser system.reflection.Mais y at-il une "belle" méthode pour mettre à jour l'objet créé dans un autre contexte de données? – takayoshi

0

Vous pouvez utiliser le modèle suivant:

  1. Fetch objet existant du référentiel
  2. Utilisez AutoMapper pour copier les propriétés
  3. Enregistrer votre objet de retour.
+0

C'est ce que j'ai fait ... xelements ou toutes les données qui sont mappés à un champ XML, vous trouverez que cela ne fonctionne pas ... – Haroon