首页 文章

WCF /实体框架更新

提问于
浏览
1

我目前正在构建一个N层应用程序,在我的IIS服务器上的Web项目上托管WCF服务(不是数据/ RIA服务),以及指向此WCF服务的服务引用的Windows Phone客户端 .

我的WCF服务通过Entity Framework访问数据库 .

这是我的问题:当我从客户端以外的任何地方更新我的数据库时,在任何客户端都无法看到更新 . 当我从特定客户端更新我的数据库时,只能由他看到修改 .

但过了一段时间,所有客户都可以访问更新的数据 .

我相信它可能是由我的WCF数据的IIS缓存或LINQ级别的缓存引起的,但是在禁用我的IIS缓存之后问题仍然存在 .

有关如何解决此问题的任何想法?

谢谢

1 回答

  • 0

    所以把它变成正式的答案:

    框架将尝试缓存值(而不是IIS) . 因此,请确保您没有将工作单元扩展到事务范围之外(即将它用于相同和检索方法) . 此外,尝试重新 Build 存储/检索调用之间的上下文,这应该删除框架中可能发生的任何现有缓存 . 即

    [OperationContract]
    public void Save(MyObject entity)
    {
      using (MyEntities db = new MyEntities())
      {
        db.MyObjects.Add(entity);
        db.SaveChanges();
      }
    }
    
    [OperationContract]
    public MyObject Single(Int32 id)
    {
      using (MyEntities db = new MyEntities())
      {
        return db.MyObjects.Single(x => x.Id == id);
      }
    }
    

    相反:

    [ServiceContract]
    class MyService
    {
      private MyEntities db = new MyEntities();
    
      [OperationContract]
      public void Save(MyObject entity)
      {
        this.db.MyObjects.Add(entity);
        this.db.SaveChanges();
      }
    
      [OperationContract]
      public MyObjectFind(Int32 id)
      {
        return this.db.MyObjects.Single(x => x.Id == id);
      }
    }
    

相关问题