2016-01-31 3 views
3

1) Я добавляю новый объект в контекст и вызываю _context.SaveChanges(). Объект добавляется как ожидалосьОбновления инфраструктуры Entity Framework (6.1.3) не отражены в DataContext

2) Я обновляю тот же объект и вызываю _context.SaveChanges() Я сразу же установил точку прерывания и проверил _context, и мое обновление отразилось на объекте И действительно сохранено в БД.

3) Я звоню _context.Set<T>().ToList() позже в моей базе кода, и обновление НЕ отражается на объекте. (_context не отражает обновленную стоимость на данный момент)

Что может быть причиной и что я могу сделать для решения? Любая помощь будет принята с благодарностью

В ответ на запрос о коде ..

из хранилища ...

public List<T> GetAll() 
    { 
     return _context.Set<T>().ToList(); 
    } 

    public void SaveChanges() 
    { 
     _context.SaveChanges(); 

     var xxx = _context.Customers.ToList(); 
    } 

От звонка, чтобы получить все ...

var customersToUpdate = _customerManager.GetAllCustomers(); 

От CustomerManager ...

public List<Customer> GetAllCustomers() 
    { 
     return _customerRepository.GetAll(); 
    } 

Довольно основные вещи.

+3

Можете ли вы показать соответствующие части кода? –

ответ

1

Вы уверены, что используете только один экземпляр _customerRepository? И что каждый раз, когда вы обновляете _context, вы делаете это в том же контексте в _customerRepository? Похоже, у вас есть несколько экземпляров, один из них обновляется, а остальные - не

+0

Я тоже думал об этом. Но я этого не делаю. Если ninject делает что-то напуганное, что я не вижу. – Trenton

1

В основном вам нужно сказать EF, что вы что-то обновили. Самый простой способ сделать это:

var customer = _context.Customers.First(); 

customer.Name = "new name"; 

_context.Entry(customer).State = EntityState.Modified; 

_context.SaveChanges(); 

Или вы можете быть более конкретным, что изменяется, как показано ниже:

customer.Name = "new name"; 
context.Entry(customer).Property(u => u.Name).IsModified = true; 
_context.SaveChanges(); 

Вы можете включить automatic changes detection так:

context.Configuration.AutoDetectChangesEnabled = true; 

В этот случай

  • DbSet.Find
  • DbSet.Local
  • DbSet.Remove
  • DbSet.Add
  • DbSet.Attach
  • DbContext.SaveChanges
  • DbContext.GetValidationErrors
  • DbContext.Entry
  • DbChangeTracker . Соединения

все автоматически обнаружит изменения.

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