EF DbContext VS Session lifetime

本文关键字:lifetime Session VS DbContext EF | 更新日期: 2023-09-27 17:57:03

我首先将实体框架代码用于电子商务网站。我想将篮子存储在会话中。我正在使用 Ninject 来管理 DbContext 的生命周期,并且我已经将其范围设置为每个请求。

我的问题是,因为篮子的生存期是每个会话,但 DbContext 的生存期是每个请求 - 篮子不会附加到每个请求的新 DbContext 实例。

我可以在每个请求上重新实例化篮子,但这似乎效率很低,因为它会获取每个请求的所有篮子详细信息。

我可以在每个请求开始时重新附加会话的篮子。从我所看到的情况来看,这似乎是最好的解决方案。

处理这种情况的建议方法是什么?

我发现了其他询问 DbContext 范围的问题/帖子,建议使用 IOC 容器为每个请求使用相同的 DbContext。我已经在这样做了 - 我还没有真正找到有关如何将每个请求的 DbContext 附加到会话状态中实体的较长生存期的问题的答案。

EF DbContext VS Session lifetime

建议的方法是不要将持久性对象存储在篮子中,而是将一些 POCO(普通对象)存储在篮子中:

  • 可用于有效地显示购物篮的内容
  • 仍然包含数据库 ID,以便在接受订单时可以使用 ID 检索数据库上下文的当前实例中的数据库实体
附加和重新附加持久性对象可能会

起作用,但是,当您最终拥有应用程序服务器场并决定将会话持久化到数据库中时,持久性对象将不得不序列化和反序列化,这可能会导致其他子问题(只要您的会话由 inproc 会话提供程序持久化,您就不会看到这些问题)。