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();
}
非常基本的东西。
答案 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;
在这种情况下
所有人都会自动检测到变化。