当前位置: 首页 > news >正文

读 PetShop代码(Profile篇)

用于存储与用户有关的数据,维护应用程序状态。Profile对象提供一个创建强类型和持久化方式的会话状态的方法。

以Profile.ShoppingCart.Add();

   Profile.Save();

   的执行流程为例

首先配置文件部分代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
<profile automaticSaveEnabled="false" defaultProvider="ShoppingCartProvider">
      
<providers>
        
<add name="ShoppingCartProvider" connectionStringName="SQLProfileConn" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/>
      
</providers>
      
<properties>
        
<add name="ShoppingCart" type="PetShop.BLL.Cart" allowAnonymous="true" provider="ShoppingCartProvider"/>
      
</properties>
</profile>

根据配置文件,属性也即需要存储的类型为PetShop.BLL.Cart,自定义用户配置提供程序为ShoppingCartProvider,用于存储PetShop.BLL.Cart类中的相关信息。由于ShoppingCartProvider为自定义用户配置提供程序,需要继承自System.Web.Profile.ProfileProvider,重写父类中的一些方法,如Initialize(),GetPropertyValues(),SetPropertyValues()等等。

启动Web应用程序,ASP.NET会根据配置文件中的相关配置创建一个ProfileCommon类的实例,该类继承自System.Web.Profile.ProfileBase类。根据ProfileCommon类的部分代码

ContractedBlock.gif ExpandedBlockStart.gif Code
public virtual PetShop.BLL.Cart ShoppingCart {
        
get {
            
return ((PetShop.BLL.Cart)(this.GetPropertyValue("ShoppingCart")));
        }
        
set {
            
this.SetPropertyValue("ShoppingCart", value);
        }
}

 

先调用重写的Initialize()方法,用来设置提供者实例的选项与初始值。然后根据(this.GetProertyValue("ShoppingCart")),调用GetPropertyValues方法,用来获取相关属性类型PetShop.BLL.Cart中的有关信息(存储在数据库中)后,进行强类型转换(PetShop.BLL.Cart)(this.GetProertyValue("ShoppingCart")),然后调用Cart.Add()方法。

调用Profile.Save()方法后,程序调用ShoppingCartProvider中重写的方法SetPropertyValue()来完成PetShop.BLL.Cart中相关信息的保存。

转载于:https://www.cnblogs.com/sunny0311/archive/2008/09/22/1296241.html

相关文章:

  • 首发2008年9月4级网工答案及解析,《4级网络工程师预测卷及考点解析》ISBN 978-7-121-07101-0...
  • 翟志刚、景海鹏、刘伯明担任神舟七号航天员
  • Ubuntu下安装 Erlang环境
  • OA选择首先要清晰概念
  • MVC(Model View Controller)模型-视图-控制器
  • WinForm下Splash(启动画面)制作
  • 28天打造专业红客(十二)
  • 应对10月20日微软黑屏的方法
  • 域的建立
  • MDT2008部署中的一些基础设置(1)
  • xp网上邻居
  • 自己写了一个把符号提前的函数
  • DirectX编程:[初级]C# 中利用 DirectSound 录音
  • RIS部署操作系统问题(解决无人值守.计算机名称.硬盘分区等问题)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • angular2开源库收集
  • Apache Zeppelin在Apache Trafodion上的可视化
  • cookie和session
  • Docker入门(二) - Dockerfile
  • HashMap ConcurrentHashMap
  • HashMap剖析之内部结构
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript新鲜事·第5期
  • jQuery(一)
  • JSDuck 与 AngularJS 融合技巧
  • pdf文件如何在线转换为jpg图片
  • vue--为什么data属性必须是一个函数
  • win10下安装mysql5.7
  • 半理解系列--Promise的进化史
  • 初识 beanstalkd
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 精彩代码 vue.js
  • 如何胜任知名企业的商业数据分析师?
  • 入口文件开始,分析Vue源码实现
  • 我是如何设计 Upload 上传组件的
  • 小程序button引导用户授权
  • 小程序测试方案初探
  • 鱼骨图 - 如何绘制?
  • UI设计初学者应该如何入门?
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #大学#套接字
  • $.ajax,axios,fetch三种ajax请求的区别
  • (3)nginx 配置(nginx.conf)
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)视频码率,帧率和分辨率的联系与区别
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Core 版本不支持的问题
  • .Net Core与存储过程(一)
  • .Net Memory Profiler的使用举例
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)