1

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

我的 WCF 服务通过实体框架访问数据库。

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

但一段时间后,所有客户端都可以访问更新的数据。

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

关于如何解决这个问题的任何想法?

谢谢

4

1 回答 1

0

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

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

[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);
  }
}
于 2012-06-04T13:39:10.633 回答