19.3 实体类模块
以上在Models文件夹中自定义了8个实体类:账户模型类AccountModels、购物车Cart、商品类别Category、订单类OrderOrder、订单详情类OrderDetailOrder、商品类Product、购物车操作类ShoppingCart、网站实体类WebshopEntities。其中,购物车操作类ShoppingCart是比较重要的,它定义了购物车操作类的属性和各种操作方法,代码保存在Models文件夹下的ShoppingCart.cs文件中,下面进行详细的介绍。
(1)定义该类的属性和获得购物车编号的方法,关键代码如下:
上面的代码中,第1行实例化实体数据模型WebshopEntities的上下文对象storeDB。第2行定义购物车操作类的编号属性。第3行定义一个字符串类型的常量CartSessionKey赋值为CartId,表示购物车Session的键名称。第4行定义GetCart方法,参数是一个包含HTTP请求信息的对象,返回值是购物车操作类对象。第5行创建一个购物车操作类的对象cart。第6行通过调用GetCartId方法获得购物车操作类对象cart的编号。第7行返回该购物车操作类对象。
第9行定义获得购物车编号的方法GetCartId,参数是一个包含HTTP请求信息的对象。第10行判断传递的HTTP请求信息中Session集合中CartId键的值如果为空,第11行再判断如果HTTP请求信息中的用户名如果不为空则第12行将用户姓名保存到Session集合中作为CartId键的值。第14行判断如果如果HTTP请求信息中的用户名为空则第15行通过Guid了的NewGuid方法实例化一个Guid类对象tempCartId获得一个唯一的临时标识。第16行将该临时标识保存到Session集合中作为CartId键的值。第19行返回Session集合中作为CartId键的值。
(2)定义将商品添加到购物车和从购物车中移除唱片的方法。关键代码如下:
上面的代码中第1行定义将商品添加到购物车AddToCart方法,参数是商品类product的对象。第2行使用实体数据上下文对象storeDB.Carts的方法SingleOrDefault通过商品对象的购物车编号和商品编号获得该购物车对象。第4行判断如果该对象不存在则在第5行~第8行创建一个新的购物车对象,给该对象的属性赋值。第9行调用实体数据上下文对象storeDB的AddToCarts方法将新创建的购物车类添加到Cart数据表中。如果第11行判断前面第2行查询的商品对象已经存在,则第12行将该对象的购物数量加1。第14行调用实体数据上下文对象storeDB的SaveChanges方法保存数据库的修改。
第16行定义从购物车中移除商品对象的方法RemoveFromCart,参数是购物车记录编号。第17行使用实体数据上下文对象storeDB.Carts的方法Single通过商品对象的购物车编号和购物车记录编号获得该购物车对象。第20行判断该对象如果存在,则在第21行继续判断如果该对象的购物数量大于1,第22行将该对象的购物数量减1。如果第24行判断该购物车对象不存在,第25行调用实体数据上下文对象storeDB.Carts的Remove方法将该购物车对象从购物车表中移除。第27行调用实体数据上下文对象storeDB的SaveChanges方法保存数据库的修改。
(3)定义清空购物车和获得购物车内商品信息的方法。关键代码如下:
代码说明:第1行定义了清空购物车的方法EmptyCart。第2行使用实体数据上下文对象storeDB.Carts方法的Where子句通过购物车操作类编号获得指定购物车对象中商品的集合。第3行~第5行使用foreach循环遍历删除该购物车对象集合中所有的对象。第6行保存数据库的更改。第8行定义获得购物车内商品信息的方法。第9行通过购物车操作类编号获得指定购物车对象中商品的集合列表并返回。
(4)定义获得购物车中商品购买数量和总价的方法,关键代码如下:
上面的代码中第1行定义获得购物车中商品购买数量的方法GetCount。第2行~第4行使用实体数据上下文对象storeDB.Carts方法的Where子句通过购物车操作类编号获得指定购物车对象中商品购买数量的总数。第5行返回该总数。第7行定义获得购物车中商品总价的方法GetTotal。第8行~第11行使用实体数据上下文对象storeDB.Carts方法的Where子句通过购物车操作类编号获得指定购物车对象中商品购买的总价。第12行返回该总价。
(5)定义创建订单和迁移购物车的方法。关键代码如下:
上面的代码中第1行创建订单的方法CreateOrder,参数是一个订单类Order对象。第2行初始化订单总价变量orderTotal为0。第3行调用GetCartItems方法获得购物车内商品信息并创建一个列表集合对象cartItems。第4行使用循环遍历cartItems对象。第5行创建一个订单详情类的对象orderDetails。第6行~第9行给orderDetails对象的商品编号、订单编号和商品单价三个属性赋值。第11行通过实体数据上下文对象storeDB. OrderDetails的方法Add将orderDetails对象添加到orderDetails数据表中。第12行计算获得订单总价。第16行保存数据库的修改。第17行调用EmptyCart方法清空当前购物车中的对象。第18行返回订单的编号。
第20行定义迁移购物车的方法MigrateCart,参数是用户名。第21行~第22行使用实体数据上下文对象storeDB.Carts方法的Where子句通过购物车操作类编号获得指定购物车对象中商品的集合。第23行~第25行使用foreach循环遍历将用户名作为购物车对象的购物车编号属性的值。第26行保存购物车的修改。