2012-05-24 3 views
1

Я использовал метод Attach обновить мой базы данных
Linq к Entity Приложить метод вопрос

 name=New Name; 
    checkBox1=false; 
    Entity entity= new Entity(); 
     entity.ID= collection.ID; 
     db.entities.Attach(entity); 
     entity.name=name; 
     entity.checkBox1=checkBox1; 
     db.SaveChanges(); 


Этот запрос обновляется только имя столбца нужной таблицы, но со значением CheckBox1 это было Nothin ...
Почему что я делаю неправильно или это ошибка?
Проблема разрешается с использованием следующего запроса syntex.

var entity= db.entities.Find(ID); 
    entity.name=name; 
    entity.checkBox1=checkBox1; 
    db.SaveChanges(); 
+0

ли autodetectchanges или выключен? –

ответ

2

Эта проблема может возникнуть, если вы переключились AutoDetectChanges прочь, Херес пост я написал о том, что делает AutoDetectChanges: http://blog.staticvoid.co.nz/2012/05/entityframework-performance-and.html

Если вы имеете эту опцию и прикрепить объект снимка двигатель не может быть в состоянии найти изменения свойств. Попробуйте вручную вызвать обнаружение изменений перед сохранением. Вы можете использовать следующее:

db.ChangeTracker.DetectChanges(); 

Другой возможный вопрос о том, что снимок двигателя думает, что начальное состояние объекта CheckBox1 ложно это означает, что она не будет регистрировать изменения, когда вы установите значение ложь. Чтобы обойти эту проблему, установите начальное значение checkbox1 в значение true, а затем установите значение false после прикрепления. Это обеспечит изменение значения и, следовательно, будет обнаружено путем создания снимков.

например, использование:

name=new Name(); 
checkBox1=false; 
Entity entity= new Entity(); 
    entity.ID= collection.ID; 
    entity.checkBox1=!checkBox1; 
    db.entities.Attach(entity); 
    entity.name=name; 
    entity.checkBox1=checkBox1; 
    db.SaveChanges(); 
+0

db.ChangeTracker.DetectChanges(); (НЕ РАБОТАЕТ) .... 2-я опция работает для меня – RollerCosta

+0

Если включена функция autoDetectChanges, она вызывается приложению, поэтому вам не нужно вручную ее называть позже –

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