Voici le scénario:LINQ - comment faire fonctionner le suivi des changements quand l'entité est passé à une autre classe que la propriété
J'ai un contrôle utilisateur ASP.NET qui exécute une requête LINQ, stocke les résultats dans une liste générique, puis charge dynamiquement un autre contrôle utilisateur (dans un espace réservé) et transmet l'un des objets de la liste au contrôle via une propriété du contrôle.
La commande enfant affiche les données de l'objet et permet à l'utilisateur de modifier différents champs. Un bouton Enregistrer sur le contrôle parent appelle une méthode "SaveInput" sur le contrôle enfant qui met à jour les propriétés de l'objet à partir des données entrées (aucun DataContext n'a été créé à ce stade).
Le problème est que je n'arrive pas à utiliser la méthode SubmitChanges de DataContext pour enregistrer l'objet mis à jour. Voici ce que j'ai essayé:
Si j'appelle SubmitChanges du contrôle parent, il ne reconnaît pas qu'il ya des changements pour sauver, même si lorsque vous examinez l'objet original (liste de contrôle parent) il a clairement obtenu de nouvelles valeurs de propriété. Je suppose que cela est dû au fait que les modifications n'ont pas été effectuées via le DataContext du contrôle parent.
Si j'essaie (dans le code du contrôle parent) d'attacher l'objet au DataContext, j'obtiens une erreur qu'il est déjà attaché (eh bien c'est, tellement juste).
Si je crée un DataContext (dans le code de contrôle enfant) puis essayez d'attacher l'objet, je reçois une erreur qu'il est déjà attaché à un autre DataContext (encore une fois, cela est vrai)
Donc ma solution maladroite est de créer un DataContext (dans le code du contrôle enfant) puis de créer une nouvelle instance du type de l'objet, puis de définir chaque propriété sur cet objet à partir de l'équivalent sur l'objet altéré, puis SubmitChanges. Pas élégant, mais ça marche.
Y a-t-il un meilleur moyen?
Balise linq-to-sql supprimée. Ce n'est pas la même chose que LINQ – Nobody