Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

248
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!