我有3个项目:
步骤:
我打开program #2
,它读取特定数据并呈现给用户。用户选择对某行执行某些操作,例如cancel/delete/update
,click事件会打开program #1
来更新数据,在更新结束时,程序#2再次读取数据库以更新DataGrid
。
的Singleton:
private static DbEntities _dbEntities;
[System.Diagnostics.DebuggerHidden]
public static DbEntities GetContext()
{
return _dbEntities ?? (_dbEntities = new DbEntities(Config.ConnectionString));
}
问题:
程序#2不接收程序#1更改的更新数据。我必须重新启动程序#2才能获得正确的数据。
我只为每个程序调用一次GetContext。
我将使用AsNoTracking
进行测试。
public List<sis_program> GetAll()
{
return DbExtensions.AsNoTracking(_context.sis_program).ToList();
//return _context.sis_program.ToList(); //old code.
}
答案 0 :(得分:1)
DbContext
存储缓存版本,除非您使用AsNoTracking()
。因此,除非您重新创建上下文,永远不要使用缓存或清空缓存,否则在其他上下文中永远不会看到在一个上下文中发生的任何事情。
答案 1 :(得分:1)
这是两个不同应用领域中的两个不同的上下文,默认情况下,您的实体框架上下文使用缓存,因为第一个上下文没有更新数据,它将读取缓存数据,因此不会看到新的更改。
要解决您需要通过程序2再次急切地读取数据以获取新更改,请尝试使用AsNoTracking
linq方法。