【问题标题】:WCF / Entity framework updateWCF/实体框架更新
【发布时间】:2023-03-10 04:35:01
【问题描述】:

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

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

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

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

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

知道如何解决这个问题吗?

谢谢

【问题讨论】:

  • 如何在 WCF 服务中处理 EF 上下文的生命周期?
  • 上下文是在另一个类中创建的,它公开了一个关于客户端(WP7、android、web)的上下文字典。我试图在我的对象上使用上下文的“刷新”方法来重新加载调用数据,但它没有改变任何东西
  • 很可能是框架正在缓存,而不是 iis。尝试在调用之间重新建立上下文,并确保您没有扩展工作单元或将上下文转换为单例模式。
  • 确实,问题出在这里。谢谢

标签: c# .net wcf entity-framework caching


【解决方案1】:

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

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

[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);
  }
}

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多