Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

249
Vistas
Entity Framework para leer una columna pero evitar que se actualice

Dada una tabla de base de datos con una columna que contiene datos históricos pero que ya no se completa, ¿hay alguna forma en Entity Framework de leer la columna pero evitar que se actualice cuando se usa el mismo objeto modelo?

Por ejemplo, tengo un objeto.

 public class MyObject { public string CurrentDataColumnName { get; set; } public string HistoricDataColumnName { get; set; } }

De la documentación, no creo que pueda hacer nada de lo siguiente, porque esto evitará que EF lea los datos y los conserve.

(1) Decore la propiedad HistoricDataColumnName con el siguiente atributo

 [NotMapped]

(2) Agregue lo siguiente a mi EntityTypeConfiguration para MyObject

 Ignore(x => x.HistoricDataColumnName)
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede marcar la columna como calculada para evitar que Entity Framework actualice/inserte en esa columna.

 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public string HistoricDataColumnName { get; set; }

Base de datos generada

Una característica importante de la base de datos es la capacidad de tener propiedades calculadas. Si está asignando sus clases de Code First a tablas que contienen columnas calculadas, no desea que Entity Framework intente actualizar esas columnas. Pero desea que EF devuelva esos valores de la base de datos después de haber insertado o actualizado los datos. Puede usar la anotación DatabaseGenerated para marcar esas propiedades en su clase junto con la enumeración calculada. Otras enumeraciones son Ninguno e Identidad.

over 4 years ago · Santiago Trujillo Denunciar

0

En cuanto al código, puede establecer el setter simplemente en protected . EF utiliza la reflexión para materializar su modelo. Creo que el setter ahora oculto también muestra a todos los demás programadores que el campo ya no debe modificarse.

También agregue un atributo [Obsoleto] con más información, por qué la propiedad ya no se puede establecer desde el público.

over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente puede usar IsModified para verificar si una propiedad de entidad específica se modificó o no y, de esta manera, aún puede leer, insertar y eliminar datos:

 var item = context.MyObjects.Find(id); item.CurrentDataColumnName = "ChangedCurrentDataColumnName"; item.HistoricDataColumnName = "ChangedHistoricDataColumnName"; context.Entry(item).Property(c => c.HistoricDataColumnName).IsModified = false; context.SaveChanges();

Al usar IsModified = false , está excluyendo la actualización de la propiedad HistoricDataColumnName , por lo que la columna HistoricDataColumnName no se actualizará en la base de datos, pero se actualizarán otras propiedades.

Establecer este valor en falso para una propiedad modificada revertirá el cambio al establecer el valor actual en el valor original. Si el resultado es que ninguna propiedad de la entidad se marca como modificada, la entidad se marcará como Sin cambios. Establecer este valor en falso para las propiedades de las entidades agregadas, sin cambios o eliminadas no es operativo.

Verifique la siguiente respuesta como una explicación complementaria. También podría ser útil:

https://stackoverflow.com/a/13503683/2946329

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda