【问题标题】:Lifetime of DbContext in Entity Framework Core 2.0 and UWPEntity Framework Core 2.0 和 UWP 中 DbContext 的生命周期
【发布时间】:2018-02-01 05:40:45
【问题描述】:

我目前正在将我的 UWP 应用程序从 sqlite-net 移动到 Entity Framework Core 2.0,并将 Sqlite 作为数据库提供程序。我想知道DbContext 对象的生命周期应该是多少。

我看过 Entity Framework 和 WPF 的教程,这些教程建议您应该在详细信息视图的生命周期内保持 DbContext 实例处于活动状态。这允许您更改模型并在用户通过调用SaveAsync() 按下按钮时保存更改或通过简单地关闭视图来取消更改。我的应用程序将从这个功能中受益匪浅。 (目前所有更改都立即存储在数据库中,这不是最优的。)

我看到将DbContext 保留更长时间的问题是,在 UWP 中,应用程序可以随时暂停,并且可能会擦除内存。我假设当应用程序重新启动时,EF 将丢失对模型所做的所有更改。所以从理论上讲,用户可能会在详细信息视图中更改模型,切换到另一个任务并执行一些导致大量内存使用的操作,从而导致我的应用程序终止。由于更改仅存储在内存中,因此它们会丢失。

那么在 UWP 中应该如何接近DbContext 的生命周期呢?我考虑过这些方法:

  1. 短暂的生命周期,这意味着我无法使用 保存/取消机制
  2. DBContext 在视图打开并接受 可能,但不太可能丢失未保存的数据
  3. 保持DBContext 存活,只要视图打开并以某种方式序列化所有 应用程序暂停时对模型的更改。这可能会 需要复杂的逻辑来恢复模型的确切状态 用户离开了。

【问题讨论】:

    标签: entity-framework uwp entity-framework-core


    【解决方案1】:

    总体而言,在构建 UWP 应用时,建议尽快保存数据,以避免丢失用户数据的风险。这不仅适用于实体框架,也适用于其他数据存储选项。

    问题出在临时(草稿)数据上,因为您的情况是在制品表格。在这种情况下,您可能不想将数据保存到数据库中。相反,您应该将数据存储在临时文件或local app settings 中。重新打开应用程序后,您可以检查是否有一些临时数据保存并恢复应用程序以前的状态。您可以通过恢复整个Frame 导航堆栈来走得更远。有一个很好的帮助类 SuspensionManager 可以用于此目的。

    有关更多建议,请参阅 documentationUX guidelines

    【讨论】:

      猜你喜欢
      • 2016-09-27
      • 2018-02-23
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2016-12-05
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多