2017-01-16 4 views
1

Способ вызова SaveChanges в DbContext будет звонить по номеру SaveChanges в ObjectContext с возможностью сохранения по умолчанию SaveOptions.AcceptAllChangesAfterSave.SaveChanges без AcceptChanges

Итак, все изменения будут совершены после сохранения.

Я хочу, чтобы контролировать его в ручном режиме:

  1. Обнаружение изменений
  2. Сохранить изменения
  3. Принять изменения

Теперь, 2 и 3 объединены в одну операцию, так что я не может делать некоторые операции между 2 и 3. Как я могу его разделить?

+0

почему бы не попробовать 'SaveChanges (ложь),' 'то AcceptAllChanges(); ' – active92

+0

@ active92' DbContext' не имеет метода 'SaveChanges (bool)' – Backs

+0

Вам не нужно было бы менять 2 и 3? Я не понимаю, как вы можете принять (или отклонить) изменения после того, как вы уже их сохранили. – Sentry

ответ

2

Основываясь на комментарий Ивана Stoev в:

internal sealed class TestContext : DbContext 
{ 
    protected ObjectContext ObjectContext => ((IObjectContextAdapter)this).ObjectContext; 

    public override int SaveChanges() 
    { 
     //detect all changes in context 
     ChangeTracker.DetectChanges(); 

     //write changes to database 
     var result = ObjectContext.SaveChanges(System.Data.Entity.Core.Objects.SaveOptions.None); 

     //do some actions with entities 
     DoStuff(); 

     //accept all changes in entities 
     ObjectContext.AcceptAllChanges(); 

     return result; 
    } 
Смежные вопросы