实体框架(6.1.3)更新未反映在DataContext中

时间:2016-01-31 22:38:25

标签: c# entity-framework entity-framework-6 datacontext

1)我在上下文中添加一个新实体并调用_context.SaveChanges()。实体按预期添加

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();
    }

非常基本的东西。

2 个答案:

答案 0 :(得分:1)

您确定只使用_customerRepository的一个实例吗?每次更新_context时都会在_customerRepository下的相同上下文中进行更新?听起来你有多个实例,一个得到更新,而其他实例不

答案 1 :(得分: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.Entries

所有人都会自动检测到变化。