2010-06-02 7 views
4

J'ai une seule classe linq à sql. Je voudrais détecter si c'est nouveau (ce qui signifie qu'une insertion sera faite) ou s'il y a des changements en attente (la mise à jour sera faite). Je me rends compte que je peux le faire en utilisant une classe partial et en accroissant dans les événements on change pour chaque propriété. Cependant, c'est beaucoup de maintenance pour une classe qui change constamment.Comment savoir si un objet linq to sql est nouveau, modifié ou non?

Y a-t-il un meilleur moyen?

Répondre

7

Vous pouvez vérifier la classe DataContext. Pour commencer, vérifiez le ObjectTrackingEnabled property sur le DataContext. Si elle renvoie false, l'objet n'est pas suivi par le contexte.

Ensuite, appelez le GetChangeSet method sur le DataContext. À partir de là, comparez les références exposées par les propriétés Deletes, Updates et à votre objet.

Si la référence est trouvée dans l'une de ces listes, alors votre objet est suivi par cette liste et vous pouvez continuer à partir de là.

+0

Simples La seule façon de le faire est de la DataContext alors? J'espérais juste le faire à partir de l'instance d'objet seul. –

+0

@Jason Webb: Si vous n'avez pas de DataContext, cela n'a pas d'importance, vous ne pouvez pas insérer, mettre à jour ou supprimer sans cela, et l'état de l'objet est détaché. – casperOne

-1

Vérifiez si l'id de l'objet est 0.

if someId = 0 
    Insert(); 
else 
    Update(); 

+0

Recherche DeferredLoading et google pour Detach() méthode - c'est quelque chose que vous aurez à mettre en œuvre, mais cela vous évitera des problèmes avec l'insertion via LINQ. –

Questions connexes