【问题标题】:static DataServiceContext in a static class静态类中的静态 DataServiceContext
【发布时间】:2013-09-09 11:30:38
【问题描述】:

我是 EF 的新手,我似乎犯了一个错误,但我想澄清一下。

我的场景:

  • Winforms 应用程序 (ClickOnce)
  • 一个静态类,其唯一职责是通过 DataServiceContext - 单个 URI 更新 DB
  • 整个应用程序中只有一个控件使用这个类

使用静态类,我创建了 DataServiceContext 的单个只读实例。还有一个 GetMethod 使用上下文中的 ToList() 获取数据 - 然后将该列表用于数据绑定。我只需要简单的 CRUD,所以有一个 Save/Delete 方法,实体被传入和更新。

当我阅读了更多关于 EF 的内容时,我了解到共享上下文由于并发问题而不好。在这种情况下,我似乎可以摆脱静态上下文,因为每个应用程序实例只会有一个用户访问相同的上下文,或者我会吗?我想让事情尽可能简单。我开始想也许我应该把静态类变成一个普通类,在方法之间共享一个不可变的 DataServiceContext 实例作为保障?也许我应该在通过 SaveChanges 进行服务调用的每个方法中应用 using(DataServiceContext) 以进一步收紧事情?我现在需要做这些事情还是可能是 YAGNI?

由于我在这里是自学成才(没有导师),因此我可能面临擅离职守的危险。我可能需要一些关于 EF 的基本规则,因为我目前的阅读还没有引导我。请帮忙。

【问题讨论】:

    标签: c# entity-framework entity-framework-5 wcf-data-services


    【解决方案1】:

    这不仅仅是关于并发性(但是是的:这是一个重要的问题)——它也是关于正确性的。如果你有一个单一的数据上下文,有几个问题:

    首先,内存:随着更多数据附加到身份管理器和更改跟踪器中,它会在应用程序的生命周期内缓慢增长。

    其次 - 新鲜度:一旦将事物附加到数据上下文,您就会看到内存中的对象 - 它可能会停止显示数据库中对象的最新状态

    第三 - 损坏:如果出现任何问题,正常的处理方式是简单地回滚任何正在进行的更改,丢弃数据上下文并报告错误和/或重试操作(在新的数据上下文上);您不能继续使用旧的数据上下文 - 它现在处于未定义状态

    出于所有这些原因,一般模式是您仅将数据上下文用作工作单元,以执行单个操作或一组相关/范围内的操作。之后,烧掉它并重新开始

    【讨论】:

    • @Jaycee 回到办公桌后会做
    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多