我有3个项目:
步骤:
我打开program #2,它读取一个特定的数据并呈现给用户。用户选择使用行进行操作,如cancel/delete/update,单击事件打开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一次。
编辑2
我将用AsNoTracking进行测试。
与以下方面合作:
public List<sis_program> GetAll()
{
return DbExtensions.AsNoTracking(_context.sis_program).ToList();
//return _context.sis_program.ToList(); //old code.
}发布于 2014-08-19 20:13:39
这是两个不同的应用程序域中的两个不同的上下文,默认情况下,实体框架上下文使用缓存,因为第一个上下文没有更新它将读取缓存的数据,因此不会看到新的更改。
要解决您需要再次通过程序2读取数据以获取新的更改,请尝试使用AsNoTracking linq方法。
发布于 2014-08-19 20:12:44
DbContext存储缓存的版本,除非您使用AsNoTracking()。因此,在一个上下文中发生的事情在另一个上下文中是看不到的,除非您重新创建上下文,不要使用缓存,或者清空缓存。
https://stackoverflow.com/questions/25392020
复制相似问题