Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EF CF中更新实体对象(分离)?_C#_Entity Framework_Ef Code First_Detach - Fatal编程技术网

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

C# 如何在EF CF中更新实体对象(分离)?,c#,entity-framework,ef-code-first,detach,C#,Entity Framework,Ef Code First,Detach,我找到了解决办法: 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.SaveCh

我找到了解决办法:

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代码优先方法的项目,我再也找不到“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");
    }
}

如何进行更新?

ApplyChanges方法可能就是您想要的:

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

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

附加方法可能会有所帮助?有关更多信息,请参阅

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

迟回复,但我认为这将有助于社区。 将更新方法更改为此

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

我没有使用自跟踪实体。。。。嗯……但是ApplyChanges方法应该来自上下文。。我们使用什么样的实体应该很重要。。。你使用的是什么类型的conext?嗯,我做了一些挖掘,“ApplyChanges”方法是自跟踪实体模板附带的一种扩展方法。它在更新期间处理实体的“跟踪”。抱歉,我会再多翻一翻。这不是没有怪癖,但确实有点帮助:)
void UpdateObject(Entity e) {
  Entity tmp = ctx.Entities.Attach(e);
  ctx.SaveChannges();
}
ctx.entities.Attach(entity);
var entry= ctx.Entry(entity);
entry.State = EntityState.Modified;
ctx.SaveChanges();