es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la lógica detrás del método SaveChanges de EF?

Cuando inserto un nuevo elemento en un DBSet, como este:

var newItemAdded = MyDBSet.Add(itemToAdd);

Luego guardo los cambios en la base de datos así:

MyContext.SaveChanges();

Mi variable newItemAdded ha sido actualizada con el nuevo Id generado automáticamente por la base de datos.

Fui a EF Core Github para ver la lógica, pero con la gran cantidad de archivos en el repositorio, no estoy seguro de entender la lógica detrás.

Mi preocupación es más sobre cómo el método SaveChanges ejecutado después de la inserción puede actualizar newItemAdded. EF no parece usar ref.

¿Quizás alguien ya sabe cómo funciona?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Cuando se agrega un nuevo elemento a un DBSet usando MyDBSet.Add(itemToAdd), en realidad no se guarda inmediatamente en la base de datos. En su lugar, se agrega a una colección en memoria de entidades que serán guardadas en la base de datos cuando se llame a MyContext.SaveChanges().

    Cuando se ejecuta SaveChanges(), EF Core genera comandos SQL para insertar la nueva entidad en la base de datos. Después de que la inserción tiene éxito, EF Core recupera el valor de ID auto-generado desde la base de datos y actualiza la propiedad correspondiente en la entidad recién insertada.

    Dado que newItemAdded es una referencia a esta entidad, su propiedad de ID también se actualiza con el nuevo valor. Esto no se realiza a través del uso de ref, sino a través del hecho de que newItemAdded y la entidad en memoria apuntan al mismo objeto en memoria.

    La lógica para esto se puede encontrar en el método Add dentro de la clase InternalDbSet en el código fuente de EF Core. Específicamente, el código que establece la propiedad de ID de la entidad recién insertada se puede encontrar dentro del método SaveChanges dentro de la clase DbContext.

    Espero que esto aclare cómo EF Core actualiza la propiedad de ID de una entidad recién insertada y cómo está relacionada con la variable que la referencia.

Comments are closed.