Las propiedades sombra son propiedades que no están definidas en la clase de entidad .NET pero sí que están definidas para ese tipo de entidad en el modelo EF Core. Los valores y estados de estos atributos se mantienen únicamente en el rastreador de cambios. Las propiedades sombreadas son útiles cuando los datos de una base de datos no deben exponerse en el tipo de entidad mapeada. El núcleo del Entity Framework introduce un nuevo tipo de atributo llamado el atributo "sombra", que no existe en EF 6.x.
El atributo sombra no está ahí. .NET de las clases de entidad. En su lugar, puedes configurarlo para un tipo de entidad específico en el modelo de datos de entidad. Puede configurarse en el método OnModelCreating() de la clase context.
El siguiente diagrama ilustra el atributo sombra.
Como se muestra en la imagen anterior, el atributo sombra no pertenece a tu clase de entidad. Por lo tanto, no puedes acceder a ella al acceder a otras propiedades de una entidad. Las propiedades sombreadas solo pueden configurarse para tipos de entidad al construir el modelo de datos de entidad, y también se mapearán a columnas de bases de datos. El valor y estado de la propiedad sombra se mantienen únicamente en el rastreador de cambios.
Entendamos los aspectos prácticos de las propiedades de sombra. Supongamos que necesitamos mantener las fechas de creación y actualización de cada registro en la tabla de la base de datos. Aprendiste a establecer las fechas de creación y modificación de las entidades en EF Core definiendo las propiedades CreatedDate y UpdatedDate en la clase de entidad. Aquí veremos cómo lograr el mismo resultado usando propiedades sombra en lugar de incluir propiedades sombra en la clase de entidad.
Considera las siguientes clases de entidad estudiantil.
La clase de estudiantes mencionadaLos atributos CreatedDate y UpdatedDate no están incluidospara mantener la hora en que fue creado o actualizado. Los configuramos como propiedades sombra en la entidad Estudiante.
Definir propiedades de sombra
Puedes usar el método OnModelCreating() para definir propiedades de sombra para tipos de entidad usando la API Fluent.
La siguiente configuración configura dos propiedades sombreadas, CreatedDate y UpdatedDate, para la entidad Estudiante.
Como puedes ver, el método Property() se utiliza para configurar las propiedades de sombra. Especifica el nombre de la propiedad sombra como una cadena y el tipo como un parámetro genérico. Si el nombre especificado en el método Property() coincide con el nombre de una propiedad existente, EF Core configurará esa propiedad existente como una propiedad sombra en lugar de introducir una nueva propiedad sombra.
Propiedades sombra en la base de datos
Una vez definidas las propiedades de sombra, necesitamos actualizar el esquema de la base de datos ya que las propiedades de sombra se asignarán a las columnas correspondientes de la base de datos.
Para ello, añade una migración de base de datos en la consola Package Manager de Visual Studio usando el siguiente comando.
La tabla de Estudiantes incluirá ahora dos columnas, CreatedDate y UpdatedDate en SQL Server, como se muestra a continuación.
Así que aunque no incluyamos estas propiedades en la clase Student y las configuremos como propiedades sombra, la base de datos tendrá las columnas correspondientes.
Acceder a la propiedad sombra
Puedes usar el método Property() para obtener o establecer el valor de la propiedad sombra en EntityEntry. El siguiente código accede al valor de la propiedad sombra.
Sin embargo, en nuestro caso, queremos establecer automáticamente los valores a estas propiedades de sombra en el método SaveChanges() para no tener que configurarlos manualmente en cada objeto entidad. Así que sobrscribe el método SaveChanges() en la clase de contexto como se muestra a continuación.
Esto establecerá automáticamente los valores para las propiedades sombra CreatedDate y UpdatedDate.
Ahora, ejecuta el siguiente código y revisa los registros en la base de datos.
El código anterior insertará los siguientes registros en CreatedDate y UpdatedDate for Students.
Así que al configurar las propiedades sombra, no tenemos que incluirlas en la clase entidad.
Configura las propiedades de sombra en todas las entidades
En lugar de configurar manualmente las propiedades de sombra en todas las entidades a la vez, puedes configurarlas manualmente.
Por ejemplo, podemos configurar todas las entidades de CreatedDate y UpdatedDate la última vez, como se muestra en la imagen siguiente.
¿Cuándo usar la propiedad sombra?
El atributo sombra puede usarse en dos situaciones:
Cuando no quieres exponer columnas de base de datos en entidades mapeadas, como en el escenario mencionado anteriormente. Cuando no quieres exponer atributos de clave extranjera, sino solo usar atributos de navegación para gestionar relaciones. La propiedad de clave extranjera será una propiedad sombra y se mapeará a la columna de la base de datos, pero no se expondrá como propiedad de la entidad. (En EF Core, si no defines una propiedad de clave extranjera en una clase de entidad, automáticamente generará una propiedad sombra para esto.) No necesitas configurar manualmente las propiedades de las claves foráneas. )
Recursos:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
|