How can i update an entity object (detach) in EF CF?

jojo picture jojo · Apr 4, 2011 · Viewed 7.1k times · Source

I find out the solution:

MyEntity tmp = ctx.Entities.Where<MyEntity>(t => t.Id == objectWithNewValues.Id).SingleOrDefault();
if (tmp != null)
{
    var entityInDb = ctx.Entry(tmp);
    entityInDb.CurrentValues.SetValues(objectWithNewValues);
    ctx.SaveChanges();
}
else
{
    throw new ArgumentException ...
}

Before i used EF4, generate code from schema, the context will have an method "context.ApplyCurrentValue(entity)"

when i try to update a detach object, i can do:

void UpdateObject(Entity e)
{    
     Entity tmp = ctx.Entities.Where(t=>t.id ==e.id);
     ctx.ApplyCurrentValue(e);
     ctx.SaveChannges();
}

Now I have a project using EF4 code first approach and I cannot find "ApplyCurrentValue" method anymore.

so how can I do the update action?

Entity class is a very simple class

public class MyEntity
{
    [Key]
    public Guid Id {get;set;}
    ...
}

my context is a also a very simple class inherte the DBContext

public MyContext : DBContext
{
    public DBSet<MyEntity> Entities {get;set}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
        modelBuilder.Entity<MyEntity>().ToTable("tblMyEntity");
    }
}

And i am trying to do something as below. but value didnt get update into database!

ctx.entities.Attach(entity);
var entityInDb = ctx.Entry(entity);
entityInDb.CurrentValues.SetValues(entity);
context.SaveChanges();

How can i do the update?

Answer

Abdul Qadir Memon picture Abdul Qadir Memon · Apr 28, 2012

late reply, but i think it will help community. change your update method to this

ctx.entities.Attach(entity);
var entry= ctx.Entry(entity);
entry.State = EntityState.Modified;
ctx.SaveChanges();