2012-09-05 21 views
5

¿Hay alguna forma de enviar una propiedad con defaultValue pero actualizarla con el resultado calculado de la base de datos? Hay un disparador en la base de datos, que para la entrada -1 desencadena un procedimiento que calcula un nuevo valor. ¿Cómo recuperar el valor?¿Cómo puedo obtener Id de la entidad insertada en Entity framework cuando uso defaultValue?

<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="None" DefaultValue="-1" /> 

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
return x.ID //gives -1, but the computed value should be different. 
+0

He intentado db.Refresh (System.Data.Objects.RefreshMode.StoreWins, x); pero sin suerte, el método de actualización probablemente busca en la base de datos usando ID, que es el valor que necesito para actualizar. –

Respuesta

-2
using (var context = new MyContext()) 
    { 
     context.MyEntities.AddObject(newObject); 
     context.SaveChanges(); 

     int id = newObject.Id; // Will give u the autoincremented ID 
    } 
+3

No está utilizando el incremento automático, sino un desencadenador para generar un valor. –

11

necesita volver a cargar la entidad, una vez savechanges.Because ha sido alterada por un trigger que no puede ser rastreado por EF. Por lo que necesitamos para recargar la entidad de nuevo desde el PP,

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
db.Entry(x).GetDatabaseValues(); 

return x.ID; 
+0

Esto se ve bien, pero no hay entrada en el contexto db –

+0

¿Está utilizando el modelo primero? –

+1

sí, estoy usando el modelo primero –

Cuestiones relacionadas