首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例实体对象在2 .exe之间不持久化更改

单例实体对象在2 .exe之间不持久化更改
EN

Stack Overflow用户
提问于 2014-08-19 20:00:41
回答 2查看 70关注 0票数 0

我有3个项目:

  1. 程序1(保存,使用#3)
  2. 程序2(阅读,使用#3)
  3. 回购,EF (保存/阅读)

步骤:

我打开program #2,它读取一个特定的数据并呈现给用户。用户选择使用行进行操作,如cancel/delete/update,单击事件打开program #1以更新数据,在更新结束时,程序#2再次读取数据库以更新DataGrid

Singleton:

代码语言:javascript
复制
    private static DbEntities _dbEntities;

    [System.Diagnostics.DebuggerHidden]
    public static DbEntities GetContext()
    {
        return _dbEntities ?? (_dbEntities = new DbEntities(Config.ConnectionString));
    }

问题:

程序2不接收被程序1更改的更新数据。我必须重新启动程序#2才能获得正确的数据。

编辑

我只为每个程序调用GetContext一次。

编辑2

我将用AsNoTracking进行测试。

与以下方面合作:

代码语言:javascript
复制
    public List<sis_program> GetAll()
    {
        return DbExtensions.AsNoTracking(_context.sis_program).ToList();
        //return _context.sis_program.ToList(); //old code.
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 20:13:39

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-08-19 20:12:44

DbContext存储缓存的版本,除非您使用AsNoTracking()。因此,在一个上下文中发生的事情在另一个上下文中是看不到的,除非您重新创建上下文,不要使用缓存,或者清空缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25392020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档