单例实体对象不会在2 .exe之间保持更改

时间:2014-08-19 20:00:41

标签: c# entity-framework

我有3个项目:

  1. 计划1(保存,使用#3)
  2. 计划2(阅读,使用#3)
  3. 回购,EF东西(保存/阅读)
  4. 步骤:

    我打开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。

    编辑2

    我将使用AsNoTracking进行测试。

    使用:

        public List<sis_program> GetAll()
        {
            return DbExtensions.AsNoTracking(_context.sis_program).ToList();
            //return _context.sis_program.ToList(); //old code.
        }
    

2 个答案:

答案 0 :(得分:1)

DbContext存储缓存版本,除非您使用AsNoTracking()。因此,除非您重新创建上下文,永远不要使用缓存或清空缓存,否则在其他上下文中永远不会看到在一个上下文中发生的任何事情。

答案 1 :(得分:1)

这是两个不同应用领域中的两个不同的上下文,默认情况下,您的实体框架上下文使用缓存,因为第一个上下文没有更新数据,它将读取缓存数据,因此不会看到新的更改。

要解决您需要通过程序2再次急切地读取数据以获取新更改,请尝试使用AsNoTracking linq方法。