2010-07-29 3 views
0

J'ai la question suivante: Il est facile d'insérer un objet dans la base de données avec un formulaire.Fusionner un objet qui était en dehors du datacontext

  1. Il suffit de créer un objet
  2. lien
  3. pour les champs de votre de.
  4. Revenir au contrôleur,
  5. créer une nouvelle datacontext et faire datacontext.InsertOnSubmit (objet)

.

public static void AddPage(string lang, Page page) 
       { 
        using (var db = new CardReaderDataContext()) 
        { 
         page.Lang = lang; 
         page.URL = UrlHelper.CreateValidSeoUrl(page.Name, "-"); 
         db.Pages.InsertOnSubmit(page); 
         db.SubmitChanges(); 
        } 
       } 

Mais si vous souhaitez mettre à jour un objet, il est un travail fastidieux. Vous faites le même flux,

  1. vous obtenez l'objet,
  2. lien à votre formulaire,
  3. après, mais alors !!! parce qu'il est allé en dehors de votre datacontext, vous devez recharger l'objet de la datacontext,
  4. transfert de toutes les variables et l'enregistrer, c'est un peu complexe expliqué donc je donne un exemple:

Pour mettre à jour un objet que vous avez modifié sous une forme:

public static void Update(Page page) 
     { 
      using (var db = new CardReaderDataContext()) 
      { 
       var _page = db.Pages.Where(p => p.Guid == page.Guid).Single(); 
       _page.ModificationDate = DateTime.Now; 
       _page.Title = page.Title; 
       _page.Description = page.Description; 
       _page.Content = page.Content; 
       _page.Keywords = page.Keywords; 
       _page.Name = page.Name; 
       _page.WTLang = page.WTLang; 
       _page.WTSKU = page.WTSKU; 
       _page.WTTi = page.WTTi; 
       _page.WTUri = page.WTUri; 
       _page.URL = UrlHelper.CreateValidSeoUrl(page.Name, "-"); 
       // _page.Order = GetMaxOrderByMenuGuid(page.MenuGuid); 
       db.SubmitChanges(); 
      } 
     } 

Je ne sais pas s'il est clair, si elle ne me commentaire, je vais modifier

+0

Est-ce Linq-to-SQL que vous utilisez? Et quelle est exactement votre question, btw? – Yakimych

+0

oui linq-to-sql, ma question est, est-il un moyen plus facile de fusionner ces objets sur la mise à jour, au lieu de, pour chaque valeur, copier la nouvelle valeur à l'objet récupéré à partir de la DB. maintenant ce que vous faites est: récupérer l'objet de DB, modifier les valeurs, récupérer le même objet, stocker chaque valeur à la dernière récupérée, mise à jour – Nealv

+0

hmmm est ma question n'est pas clair ou est-il juste aucune réponse à cela – Nealv

Répondre

1

Je pense que vous recherchez DataContext.Attach, mais vous ne pouvez l'utiliser qu'avec des objets linqtosql qui ont été sérialisés/désérialisés.

avoir une lecture de la réponse à cette question -. http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/384a1c03-3acf-43ef-9a25-b84f93025e63/

« Il est pas non plus une bonne idée de même tenter de récupérer l'ancienne version par fait que vous êtes en effet de désactiver Concurrence optimiste, donc à moins que vous vouliez que ce soit une mauvaise approche . Ce que vous devez faire est aller-retour à la fois l'état d'origine et l'état actuel de l'objet. "

+0

ce n'est pas vraiment une réponse de solution globale (je ne pense pas qu'il y en ait une), mais le lien que vous avez fourni et ceux qui sont présent dans celui-ci sont plus utiles, et donnez-moi un bon aperçu de la question – Nealv

Questions connexes