代码之家  ›  专栏  ›  技术社区  ›  WynDiesel

实体框架6-具有依赖注入的未缓存数据

  •  0
  • WynDiesel  · 技术社区  · 7 年前

    我最近发现EF缓存的困难之处。我有一个创建初始 DbContext . 对于创建的所有其他viewmodel,我都会传递该上下文。这样,我只有一个连接,并且有依赖注入。

    我在其中一个viewmodels中有一个函数,它可以改变一个实体的状态。当我尝试从数据库中取回实体时,状态保持不变(我假设这是由于缓存造成的)。

    var context = new MyContext();
    

    这会起作用,但它会阻止我只有一个连接,并消除我的依赖注入。

    有没有其他方法可以获得实体的真实价值?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ivan Stoev    7 年前

    对于长寿命上下文和实体跟踪系统来说,这是一个已知的问题。

    这个 DbEntityEntry Reload , GetDatabaseValues ,以及通过设置 State Detached . 但它们适用于事先已知的单个实体。

    也是老的 ObjectContext MergeOption 枚举- AppendOnly , OverwriteChanges , PreserveChanges NoTracking . 但他们都进去了 DbContext 唯一剩下的选择就是 没有跟踪

    因此,只要您想确定您将获得实际的数据库状态,就可以考虑使用 .AsNoTracking() 扩展方法。请记住,返回的实体基本上是断开连接的,因此修改它们并将修改应用到后面是很困难的,可能会导致如下异常 等。