2009-02-09 8 views
15

J'ai une procédure dans laquelle je dois enregistrer un objet entité. Le problème est que je ne sais pas si cette entité est attachée à mon datacontext ou non. Pour résoudre cela, j'utilise le code suivant:Détecter si l'entité est attachée à un datacontext

try 
{ 
    db.ClientUsers.Attach(clientUser); 
    db.Refresh(RefreshMode.KeepCurrentValues, clientUser); 
} 
catch { } 

db.SubmitChanges(); 

Je suis à la recherche d'une meilleure méthode pour détecter si une entité appartient à un contexte et aussi pour tester si une entité est attachée à un contexte spécifique.

Répondre

22

Je me demande ... qu'est-ce que GetOriginalEntityState retourne pour un objet non-attaché? Même si elle lance une exception, il sera probablement plus rapide qu'un rafraîchissement ...

(mise à jour) - un test montre qu'il renvoie null:

 Customer cust = new Customer(); 
     Customer orig = ctx.Customers.GetOriginalEntityState(cust); 
     Assert.IsNull(orig); 

     cust = new Customer(); 
     ctx.Customers.Attach(cust); 
     orig = ctx.Customers.GetOriginalEntityState(cust); 
     Assert.IsNotNull(orig); 
     Assert.AreNotSame(cust,orig); 

Alors peut-être utiliser GetOriginalEntityState et vérifier null retour valeur ...

+3

C'est génial! Fait pour une belle méthode d'extension "IsAttached (Of T)" pour DataContext. – rossisdead

Questions connexes