2009-02-09 14 views
15

Tengo un procedimiento en el que necesito guardar un objeto de entidad. El problema es que no sé si esta entidad está unida a mi contexto de datos o no. Para resolver este uso el siguiente código:Detectar si la entidad está conectada a un contexto de datos

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

db.SubmitChanges(); 

Busco un mejor método para detectar si una entidad pertenece a un contexto y también para probar si una entidad está unido a un contexto específico.

Respuesta

22

Me pregunto ... ¿qué devuelve GetOriginalEntityState para un objeto no conectado? Incluso si se produce una excepción, probablemente será más rápido que un refresco ...

(actualización) - una prueba de muestra se devuelve un valor nulo:

 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); 

Así que tal vez usar GetOriginalEntityState y comprobar NULL devuelto valor ...

+3

Esto es genial! Hace un buen método de extensión "IsAttached (Of T)" para DataContext. – rossisdead

Cuestiones relacionadas