2016-08-31 4 views
-1

Я использую ef в проекте webapi. В функции A я изменяю свойство A одного объекта, функцию B, меняю свойство B. Когда я отправляю их на то же самое время, я нашел только одно свойство было изменено, я уверен, что все сообщения на успех, но как я могу изменить эти 2.EF обновляет одну строку в одно и то же время

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

    db.SaveChanges(); 
    } 
+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 метод дважды, потому что структура субъект получит его из локального контекста вместо базы данных после первого раза. Или будет здорово получить участника и отправить его в FunctionA и FunctionB. И я считаю, что у вас есть все основания изменить A и B пользователей в разных форматах.

+0

Ty, я тестирую 'db.Entry (member) .Property ("PropertyName"). IsModified = true;' , это работает для меня, большое вам спасибо! – Nico

+0

@RuruXiang, добро пожаловать –

Смежные вопросы