2016-08-31 42 views
-1

我在一个webapi项目中使用ef。在函数A中,我更改了一个实体的属性A,函数B,我更改了属性B.当我发布到这些同时,我发现只有一个属性已被修改,我敢肯定的帖子全部成功,但我怎么能修改这些2.EF在同一时间更新一行

​​
+0

你的功能A和功能B在哪里?你可以把这些呢? – Sampath

+0

@Sampath下面的答案是我的意思,A和B是相同的,但改变实体的不同支柱。我已经解决了,泰也! – Nico

回答

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成员。

+0

Ty,我测试'db.Entry(member).Property(“PropertyName”)。IsModified = true;' ,它适用于我,非常感谢你! – Nico

+0

@RuruXiang,不客气 –