Marcar la propiedad de navegación como modificado en Entity Framework 7

entity-framework-core

Pregunta

Tengo un EF7 DbContext con seguimiento de cambios deshabilitado porque quiero marcar todos los cambios explícitamente:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

Esto funciona exactamente como lo quiero.

Sin embargo, esto no funciona cuando se ha actualizado una referencia (propiedad de navegación).

Por ejemplo, digamos que mi entidad tiene dos propiedades: ParentId y Parent donde ParentId es una clave externa y Parent es la referencia a la entidad principal.

Vocación

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

no funciona y lanza la ModelItemNotFoundException porque Parent no es una propiedad de la entidad en términos de EF (en su lugar, es una navegación).

En EF6, esto podría hacerse de la siguiente manera:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

EN EF7, no hay tal función. Puedo llegar al objeto de INavigation con

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

pero no puede ver ninguna forma de marcarlo como modificado.

Entonces, ¿cómo debo hacerlo?

Nota: Sé que la configuración de ParentId funcionaría, pero esto no es adecuado para mí porque la entidad a la que se hace referencia aún no tiene una ID, ya que se acaba de crear y obtendrá su ID de la base de datos cuando se guarde. Por lo tanto, necesito configurarlo a través del Parent referencia.

Editar:

La nota anterior era cierta para el EF6 pero ya no es válida para el EF7 del cual no tenía conocimiento. Por lo tanto, la solución es tal como se describe en la nota y la respuesta a continuación.

Respuesta aceptada

Wow, parece que cuando una nueva entidad se adjunta al DbContext , en realidad obtiene ID (-1 en mi caso). Por lo tanto, puedo establecer ParentId incluso cuando la entidad de destino es nueva y aún no se ha agregado a la base de datos.

Me pregunto si hay alguna verificación de que la nueva ID sea única (ya podría haber una entrada con ID -1 en la base de datos).




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué