2011-05-17 29 views
10

Estoy añadiendo una entidad a mi base de datos de este modo:Id de Entidad recién añadido antes SaveChanges()

public TEntity Add(TEntity entity) 
{ 
    return (TEntity)_database.Set<TEntity>().Add(entity); 
} 

Sin embargo, el método no devuelve DbSet.Add la entidad que acaba de agregar el Id etc, es simplemente devolviendo el objeto que pasé a mi método Add.

¿Debería devolverme la entidad nueva completa que incluye Id, o no es posible obtener el Id antes de llamar al SaveChanges()?

Respuesta

17

Todo lo que hace la llamada al Add() es registrarlo efectivamente con el contexto de datos para que la entidad pueda ser rastreada. No se realiza ninguna operación real contra la base de datos en este momento hasta que (como lo menciona con razón) llame al SaveChanges().

Supongo que está utilizando Ids generados automáticamente en su tabla; en este caso, es el motor de la base de datos el que generará ese Id cuando se inserte el registro, y Entity Framework lo leerá y rellenará su entidad por usted.

Por lo tanto, para confirmar sus sospechas, no - no es posible obtener el Id. Antes de llamar al SaveChanges() en este caso.

Espero que esto ayude!

+0

aplausos, pensé que debía serlo, molesto con respecto a mi problema actual, pero tiene sentido – jcvandan

+1

Si puede cambiar los tipos de clave principal, puede usar los GUID y generarlos con su código .net antes de enviarlos al DB . –

Cuestiones relacionadas