Как я могу обновить объект сущности (отделить) в EF CF? - PullRequest
5 голосов
/ 04 апреля 2011

Нахожу решение:

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 (юридическое лицо)"

когда я пытаюсь обновить объект отсоединения, я могу сделать:

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

Теперь у меня есть проект, использующий подход с кодом EF4, и я больше не могу найти метод ApplyCurrentValue.

так как я могу выполнить обновление?

Класс сущности - это очень простой класс

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();

Как мне сделать обновление?

Ответы [ 3 ]

6 голосов
/ 29 апреля 2012

поздний ответ, но я думаю, это поможет сообществу.измените свой метод обновления на этот

ctx.entities.Attach(entity);
var entry= ctx.Entry(entity);
entry.State = EntityState.Modified;
ctx.SaveChanges();
0 голосов
/ 04 апреля 2011

Может, метод Attach поможет?Взгляните на эту статью для получения дополнительной информации.

void UpdateObject(Entity e) {
  Entity tmp = ctx.Entities.Attach(e);
  ctx.SaveChannges();
}
0 голосов
/ 04 апреля 2011

Метод ApplyChanges может быть тем, что вам нужно:

model.ApplyChanges("Objects", object);
model.SaveChanges();
object.AcceptChanges();

Примечание: в нашем сервисе EF4 мы используем шаблоны самообследования объектов T4

...