【发布时间】: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 的生命周期呢?我考虑过这些方法:
- 短暂的生命周期,这意味着我无法使用 保存/取消机制
- 让
DBContext在视图打开并接受 可能,但不太可能丢失未保存的数据 - 保持
DBContext存活,只要视图打开并以某种方式序列化所有 应用程序暂停时对模型的更改。这可能会 需要复杂的逻辑来恢复模型的确切状态 用户离开了。
【问题讨论】:
标签: entity-framework uwp entity-framework-core