Guarde una entidad actualizada excepto una propiedad única de esta entidad en Entity Framework Code First 4.1

Primero pondré el código y luego explicaré lo que quiero hacer:

1 public bool UpdateEntity(Ent myEnt)
2 {
3     int affectedRowsNo = 0;
4     using (Entities dbContext = new Entities())
5     {  
6         dbContext.Ents.Attach(myEnt);
7         dbContext.Entry(myEnt).State = EntityState.Modified;
8         affectedRowsNo = dbContext.SaveChanges();    
9     }
11    if (affectedRowsNo > 0)
12        return true;
13    return false;
14}

Este método guarda una entidad actualizada, funciona bien, pero quiero que cierta propiedad de esta entidad permanezca sin cambios en db. En otras palabras, quiero que esa propiedad no se guarde en dbContext.SaveChanges();

Intenté esto y no funcionó (insertado en el código anterior después de la línea no 7):

dbContext.Entry(myEnt).Property(e => e.ExceptedProperty).EntityEntry.State = EntityState.Unchanged;

Gracias por cualquier sugerencia o idea :).

preguntado el 08 de noviembre de 11 a las 15:11

¿Quieres Siempre hay excluir la actualización de esa propiedad en particular? -

2 Respuestas

Yo haría esto:

using (Entities dbContext = new Entities())
{  
    var entInDb = dbContext.Ents.Single(e => e.Id == myEnt.Id);

    myEnt.ExceptedProperty = entInDb.ExceptedProperty;

    dbContext.Entry(entInDb).CurrentValues.SetValues(myEnt);
    affectedRowsNo = dbContext.SaveChanges();    
}

Aquí ( Al actualizar la propiedad de fecha y hora de la entidad de marcado sin cambios ) son algunos detalles más y alternativas, pero consideraría la solución anterior como la mejor manera.

contestado el 23 de mayo de 17 a las 13:05

Agregaría un mapa para la clase Ent con

this.Property(z => z.ExceptedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

Cualquier actualización de ExceptedProperty será ignorado

Por ejemplo:

public class Context : DbContext
{
    static Context()
    {
        Database.SetInitializer<Context>(null);
    }

    public DbSet<Ent> Ents { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new EntMap());
    }
}

public class EntMap : EntityTypeConfiguration<Ent>
{
    public EntMap()
    {
        this.Property(e => e.ExceptedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    }
}

Respondido 10 Abr '12, 19:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.