【问题标题】:Short-living DbContext with desktop applications and a local database带有桌面应用程序和本地数据库的短命 DbContext
【发布时间】:2013-02-14 23:25:38
【问题描述】:

这个问题的灵感来自我之前问过here 的一个问题,我从那个问题中了解到 DbContext 实例应该是短暂的依赖项。现在考虑到我使用 SQL CE 使用本地数据库开发 LOB 桌面应用程序,我有几个问题:

  1. 在我的情况下(本地数据库、单用户、桌面应用程序),DbContext 真的应该存在很短的时间吗?
  2. 如果我在每次操作时都处理掉我的 DbContext,那是否会让我丢失在其生命周期中收集的所有跟踪信息?
  3. 如果 2 的答案是真的(麻烦!),如何以正确的方式去做,我应该开发一个 UnitOfWork 来保存更改跟踪信息还是什么?!

【问题讨论】:

    标签: entity-framework ef-code-first sql-server-ce desktop-application


    【解决方案1】:

    老问题,但它可能对某人有所帮助。

    this 文章中所述,dbContext 对象的生存取决于它在 Web 或桌面应用程序中使用的天气。

    网络应用程序

    • 现在对于 Web 应用程序来说,这是一种常见的最佳实践, 每个请求都使用上下文。

    • 在 Web 应用程序中,我们处理的请求非常短,但
      持有所有服务器事务,因此它们是正确的
      上下文存在的持续时间。

    桌面应用程序

    • 对于桌面应用程序,如 Win Forms/WPF 等,使用上下文 每个表单/对话框/页面。

    • 因为我们不想让上下文作为我们的单例 当我们从一种形式转移到另一种形式时,我们将处理它。

    • 这样,我们将获得很多上下文的能力,而不会 遭受长时间运行上下文的影响。

    基本上,上下文应该是短暂的对象,但始终保持适当的平衡。

    【讨论】:

      【解决方案2】:

      1) 是的,短是好的。但是每个用户输入/交互都是极端的

      2) 显然是的。但是除了来自客户端交互的逻辑工作单元之外,丢弃上下文的模式非常适合。例如更改订单。可能是 Header、Items 和 cust 已加载。新地址添加到 cust、Order 标头更改和 SaveChanges。新的逻辑交互从客户端开始。不要忘记你可以有几个较小的上下文。事实上,有界上下文是性能的关键。也许您有 1 个长时间运行的上下文,其中包含系统配置和其他非易失性设置,数量很少但经常访问。我会将这样的上下文保留更长时间。

      *3)*不确定到底是什么问题。但是具有 Commit 方法然后处理上下文的 LUW 类型的 Class 是 1 种这样的模式。

      如果经常重新加载,不要忘记在 DbContexts 上生成视图。

      【讨论】:

      • 你能否解释一下你的最后一个建议,“不要忘记生成视图......”,我不知道你是否在微软工作,但如果这整个代码是第一件事是为了帮助 DDD 开发人员而开发的,并且由于 DbContext 代表一个跟踪事物的 UoW,因此处理它并不会真正给它带来任何好处:我的意思是它不会做 UoW 中最重要的事情之一应该做的:变更跟踪。感谢您的帮助。
      • 确定:如果您还没有安装实体框架 powertools。 visualstudiogallery.msdn.microsoft.com/… 然后在您的数据库上下文类上单击鼠标右键,您应该会看到一个内容菜单选项实体框架。里面有生成视图选项。它在项目中生成一个类。这个类有一个嵌入汇编指令。这使得首次访问数据库集更快。在这个 MS EF 网站上有一些很好的性能提示:msdn.microsoft.com/en-au/library/cc853327.aspx
      • 感谢您对问题第一部分的解释,我可以得到您对另一部分的评论吗?
      • 关于自我追踪.... 让 EF 为您做到这一点。除非您将其关闭,否则 EF 将跟踪加载的实体及其更改。如果您想知道发生了什么变化,可以参考一些关于如何找出发生变化的工具/建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多