繁体   English   中英

如何在EF CF中更新实体对象(分离)?

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

我找到了解决方案:

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”方法。

那么我该如何执行更新操作?

实体类是一个非常简单的类

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

我该如何进行更新?

回复较晚,但我认为这将对社区有所帮助。 将您的更新方法更改为此

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

ApplyChanges方法可能是您所追求的:

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

注意:我们在EF4服务中使用了自我跟踪实体T4模板

也许Attach方法会有所帮助? 请参阅本文以获取更多信息。

void UpdateObject(Entity e) {
  Entity tmp = ctx.Entities.Attach(e);
  ctx.SaveChannges();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM