我在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();
}
答案 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
方法,因为实体框架会在第一次从本地上下文而不是数据库中获取它。或者很高兴获得会员并将其发送给FunctionA
和FunctionB
。我相信,您有充分的理由以不同的方式更改A
和B
成员。