Я нашел решение:
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 ...
}
До того, как я использовал EF4, сгенерируйте код из схемы, в контексте будет метод "context.ApplyCurrentValue (entity)"
, когда я пытаюсь обновить отсоединенный объект, я могу сделать:
void UpdateObject(Entity e)
{
Entity tmp = ctx.Entities.Where(t=>t.id ==e.id);
ctx.ApplyCurrentValue(e);
ctx.SaveChannges();
}
Теперь у меня есть проект, использующий метод первого кода EF4, и я больше не могу найти метод "ApplyCurrentValue".
Итак, как я могу выполнить действие обновления?
Класс Entity - очень простой класс
public class MyEntity
{
[Key]
public Guid Id {get;set;}
...
}
мой контекст также очень простой класс, наследующий 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");
}
}
И я пытаюсь сделать что-то, как показано ниже. но значение не было обновлено в базе данных!
ctx.entities.Attach(entity);
var entityInDb = ctx.Entry(entity);
entityInDb.CurrentValues.SetValues(entity);
context.SaveChanges();
Как мне сделать обновление?