实体框架和MVC应用程序-如何

本文关键字:如何 应用程序 MVC 框架 实体 | 更新日期: 2023-09-27 18:00:14

对于一个新的MVC项目,我计划学习并使用实体框架EF4.1。更多的是用EF来教育自己,而不是出于任何其他原因。许多微软开发人员的演示都使用EF作为他们选择的数据访问工具。

然而,我对EF的了解越多,我对它的问题就越多。例如。。。

我想在结账过程开始时保存客户的"购物篮"。使用EF4.1将篮子保存到数据库既简单又快捷。然后,我想通过购买过程的各种页面请求来保持购物篮。我可以使用EF保存并重新获得每个页面请求的篮子。这会很好地工作,意味着我在每一步都有一个保存的篮子副本。然而,这可能会耗费大量资源,并减缓进程。因此,我可以做我通常做的事情,并在整个买入过程中坚持篮子。然而,我有一个与EF"分离"的购物篮,如果在购买过程中对购物篮进行了更改,我必须以某种方式手动将会话购物篮与保存到数据库中的对象同步。这可能是相当多的工作,对我来说听起来不像是进步。

我在这里和各种博客上看了很多帖子,"自我跟踪实体"的概念看起来很合适。但这里的许多帖子都说STE对网络应用程序来说是个坏主意。

那么,考虑到许多人认为EF对于web应用程序来说并不是过度的,那么处理上述情况的最佳方法是什么呢?

实体框架和MVC应用程序-如何

然而,我有一个与EF"分离"的购物篮,如果在购买过程中对购物篮进行了更改,我必须以某种方式手动将会话购物篮与保存到我的数据库中的对象同步

为什么?这是一个对象,为什么需要同步?您只需将其添加到数据库中即可。换句话说,在他们确认之前,不会在DB中创建任何内容。

购物篮非常适合会议。把每一页都保存到数据库中,然后再阅读它是愚蠢的。因为如果他们点击取消怎么办?您要删除"不完整"的对象吗?

将其存储在会话中,从会话中读取,当他们确认购买时,只需将其添加到数据库:

CCD_ 1。

然而,我有一个篮子与EF"分离",如果通过购买过程中,我必须以某种方式手动同步会话篮子里的东西保存到我的数据库

您总是分离basket,因为您正在为每个请求创建一个新的上下文实例,不是吗?如果没有,那么你做错了。共享上下文是反模式的。

您确实需要手动同步状态@RPM有一篇很好的帖子。

如果你想保留购物篮,例如,如果客户中途离开,稍后回来(想想亚马逊;我的购物篮里有几个月甚至几年的东西),那么你必须将购物篮存储在数据库中,并且用户必须登录才能实现这一点。

如果是这种情况,那么您可以简单地根据当前登录的用户的id检索购物篮(假设用户一次只能有一个活动购物篮)。这是Dave,请把数据库里Dave的篮子拿给我。哦,他没有,创造一个新的。诸如此类的事情。

如果你想匿名向购物篮中添加东西,然后在用户登录时将其转化为订单,你可以将购物篮存储在会话中,然后在他们登录后,检索并存储在数据库中,如上所述。

你也可以这样做,即使用户已经登录,但当然,如果他们中途放弃,你就无法维护购物篮。