EF同时更新一行

时间:2016-08-31 05:49:58

标签: c# entity-framework

我在webapi项目中使用ef。在函数A中,我更改了一个实体的属性A,函数B,我更改了属性B.当我同时发布到这些时,我发现只有一个属性已被修改,我确信帖子都成功,但我怎样才能修改这些2.

 using (NielsenPMContext db = new NielsenPMContext())
    {
     var member = db.Members.Find(openid);
     member.A=a;
     db.Entry(member).State = EntityState.Modified;

     db.SaveChanges();
    }

1 个答案:

答案 0 :(得分:1)

您应该在两种方法中使用一个上下文。也不要使用db.Entry(member).State = EntityState.Modified;,因为它会为所有属性生成更新语句。请改用db.Entry(member).Property("PropertyName").IsModified = true;。如果context.Configuration.AutoDetectChangesEnabled == true,并且您从上下文中获取数据以进行修改,则您不需要使用其中的任何数据。

public void FunctionA(DbContext context, int openid)
{
    var member = db.Members.Find(openid);
    member.A=a;
    db.Entry(member).Property("A").IsModified = true;
}

public void FunctionB(DbContext context, int openid)
{
    var member = db.Members.Find(openid);
    member.B=b;
    db.Entry(member).Property("B").IsModified = true;
}

然后调用这两个方法和SaveChanges一个上下文,如:

using (NielsenPMContext db = new NielsenPMContext())
{
    FunctionA(db, openid);
    FunctionB(db, openid);

    db.SaveChanges();
}

注意:不要害怕两次使用Find方法,因为实体框架会在第一次从本地上下文而不是数据库中获取它。或者很高兴获得会员并将其发送给FunctionAFunctionB。我相信,您有充分的理由以不同的方式更改AB成员。