【问题标题】:storing entity framework self tracking entities in asp.net session, good idea?在 asp.net 会话中存储实体框架自我跟踪实体,好主意吗?
【发布时间】:2010-08-13 19:18:53
【问题描述】:

让我们假设我有一个可重用的业务层,它进一步利用了使用 Entity Framework 4.0 实现的数据访问层。业务层返回/使用的实体是自我跟踪的,允许我们使用这些类型的实体附带的所有好处。

我希望能够跨回传存储我使用的实体(以避免每次都重新查询)。基本上让我们假设我有一个分页的 GridView,其中包含 10 个项目,以及类似 DetailsView 来编辑这些项目。每次在网格上选择新行时,详细信息视图都会使用所选行的信息进行更新。我的偏好是仅在页面的初始请求中查询实体并将其存储在会话中。随后,我有一个实体列表,我可以使用这些实体并最终对其进行修改并将所有更改发送回业务层。

我真的想使用会话而不是视图状态来减少页面负载(自我跟踪实体很重)但是我真的很喜欢视图状态,因为当用户离开页面时没有残留效果。

让我担心的一些事情是:

  1. 当用户从页面导航到另一个页面时,前一页面中的实体仍处于会话中。我总是可以在加载页面时做一些事情来做家务类型的工作。不确定这是否是好的做法。
  2. 我担心人们打开浏览器选项卡并在同一个页面中有两个视图,这似乎会造成问题。
  3. 这是一个好方法吗?似乎我正试图拥有世界上最好的东西,如果简单地在每个回帖中重新查询实体并支付 50-100 毫秒的数据库访问费用,肯定会容易得多。

非常感谢您的想法。

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-4


    【解决方案1】:

    接受返回数据库的打击。如果您的网站流量低到足以让您考虑将其添加到会话中,那么查询命中就可以了。

    这也有好处,因为您可以进行更简单的并发检查,并且您也不会遇到上面提到的问题,即当有人打开两个选项卡时会话“交叉”。

    【讨论】:

      【解决方案2】:

      如果您要访问数据库,那么您几乎失去了自我跟踪实体的好处,该实体能够在没有对象上下文时跟踪更改。因此 asp.net 无状态场景是 STE 的一个不错的选择。我认为您只需要在视图状态中保留一个实体,即您正在编辑的实体不应该那么重。您可以选择 Session,但出于与您提到的相同原因,我从不喜欢 session。当某些东西悬而未决时,它会导致很多错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        相关资源
        最近更新 更多