企业库整体概览

引用 Alex Homer 的企业库开发指导中的企业库组建依赖关系图图:

使用企业库配置编辑工具:

A)数据访问(Data Access)
1)配置文件
  在配置文件中(App.config 或 Web.config)编辑定义数据库连接串,使用  DatabaseFactory.CreateDatabase(数据库连接串的配置名称) 来创建 Database 实例。
  配置文件中各项配置信息默认是明文保存的,在企业库配置信息编辑器(EntLibConfig.exe)中可以设置是否加密保存,各个程序块的根节点和“Application Settings”节点、“Environments”下的“Environment”子节点都可以选择,提供的 ProtectionProvider 有:RsaProtectedConfigurationProvider、DataProtectionConfigurationProvider。
2)数据库类 Database
属性

ConnectionString 数据库连接串。只读。

方法

CreateConnection 创建一个数据库连接 DbConnection ,并返回。在手动控制事务时可以使用。
GetSqlStringCommand 根据SQL命令获取一个 SqlCommand 实例。
GetStoredProcCommand 根据存储过程名获取一个 DbCommand 实例。
ExecuteReader 获取一个 IDataReader 实例,以便逐行读取数据。
ExecuteNonQuery 执行一个SQL命令(select类型除外)或存储过程,同时返回命令执行所影响到记录数。
ExecuteScalar 执行一个SQL命令(select类型)或存储过程,返回满足条件的数据的第一行第一列的数值;如果没有数据,则返回 null (此种情况需要在程序中注意)。
ExecuteDataSet 执行一个SQL命令(select类型)或存储过程,返回一个 DataSet 实例,此 DataSet 包含了满足条件的数据; DataSet 中的各个 DataTable 的名称默认是以“Table”开始命名的,其后则自动加入序号,如有3个 DataTable 则依次是“Table”、“Table1”、“Table2”。
LoadDataSet 执行一个SQL命令(select类型)或存储过程,并将满足条件的数据填充到一个已创建的 DataSet 中,同时使用传入的 tableNames 参数来对 DataSet 中的各个 DataTable 命名。
UpdateDataSet 根据变更的 DataSet(使用 getChanges 获取) 和 insert、update、delete各自的 DbCommand 的SQL语句(要求有参数),使用参数 TableName 来明确 DataSet 中要保存的目标 DataTable ,保存数据更新到数据库中,返回执行成功的记录数。如果已经明确保存的具体动作类型(插入、修改、删除),则可以选择性地对 insert、update、delete各自的 DbCommand 赋值传入,如果不需要则可以传入 null 来代替。

3)使用 SqlDataAdapter 来保存数据

使用SqlDataAdapter保存数据

string mySql = "select * from MyTable where 1 = 0";
DataSet dsChanges = myDataSet.GetChanges();
SqlDataAdapter adapter = (SqlDataAdapter)db.GetDataAdapter();
adapter.SelectCommand = (SqlCommand)db.GetSqlStringCommand(mySql));
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
bool saved = adapter.Update(dsChanges) > 0;

4)控制事务

使用DbConnection

using(DbConnection conn = db.CreateConnection())
{
DbTransaction trans = conn.BeginTransaction();
try
{
...
trans.Commit();
}
catch(Exception ex)
{
trans.Rollback();
}
}

using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
...
scope.Complete();
}
catch(Exception ex)
{
}
}

B)异常处理(Exception Handling)
实现步骤:
①定义异常策略:Exception Policy
②选择指定异常类型:Exception Type
设定属性:PostHandlingAction,决定是否重新抛出异常。
③定义异常处理器:Exception Handler
Wrap Handler   封装。
Replace Handler  替换;同 Wrap Handler,另外可以抛出新的不同类型的异常。
Logging Handler  日志记录,添加异常错误信息到操作系统的日志当中。须与 Logging 程序块配合。
Custom Handler  自定义。实现接口 IExceptionHandler 的方法 HandleException 即可,同时须在类定义中使用属性 [ConfigurationElementType(typeof(CustomHandlerData))] 。
④使用
ExceptionPolicy.HandleException(异常, 异常策略名称)

C)日志记录(Logging)

属性:TracingEnabled 关闭或打开日志记录的功能。
过滤器:Filters 设置源类别是否可以进行日志记录。
源类别:Category Sources 对不同的源定义不同的类别,同时指定该类别使用的跟踪监听器(可以是多个)。
特殊类别:Special Sources 错误、警报、未处理的异常、所有事件。指定各自的跟踪监听器。
跟踪监听器:Trace Listeners 设定记录日志信息的具体实现方式,指定各自的记录格式助手。如果是自定义,则须从 CustomTraceListener 继承,可以覆盖基类方法 TraceData、Write、WriteLine,同时须在类定义中使用属性 [ConfigurationElementType(typeof(CustomTraceListenerData))] 。
记录格式助手:Formatters 对记录的日志信息设置格式。
记录器:Logger 记录日志的供调用的类。方法 GetFilter、ShouldLog、Write。
记录实体项:LogEntry 记录项。有属性:Message、Priority、Severity、EventId、Categories。
日志过滤器:ILogFilter 主要在 Logger 中使用。属性 Enabled ,方法 ShouldLog 。

D)数据检验(Validation)
主要的实现途径有三种:
①企业库配置编辑工具
②类定义的源文件(使用属性定义)
③VS的IDE设计器
添加引用 Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WinForms.dll 。

TextBox控件设计界面:

TextBox属性编辑界面:

在企业库配置编辑工具中的操作步骤大致为:
①选择已有的类或数据类型或定义新的类或数据类型。
②针对相应的类或数据类型定义检验规则集,可以定义多个规则集 Rule Set。
③在规则集中添加需要检验的数据项目(成员、方法、属性),对每个数据项目设定检验器 Validator,可以定义多个检验器。

E)统一与依赖注入(Unity Dependency Injection)
这方面的内容比较难理解。
统一容器类:IUnityContainer  方法 Resolve、RegisterInstance、GetInstance、RegisterType。

引用 Alex Homer 的企业库开发指导中的依赖注入的概览图:

F)缓存(Caching)
个人认为比较简单。
缓存管理器:ICacheManager  通过 CacheFactory.GetCacheManager 获得。方法 Contains、Add、Remove、Flush。

G)加密解密(Cryptography)
个人认为最容易理解和使用。
加密解密管理器:Cryptographer  方法 CreateHash、CompareHash、EncryptSymmetric、DecryptSymmetric。

H)安全(Security)
先在配置工具中定义验证规则,然后再程序中使用。感觉有点乱。
验证提供者:IAuthorizationProvider  通过 AuthorizationFactory.GetAuthorizationProvider(配置名称) 获得。方法 Authorize。
安全缓存提供者:ISecurityCacheProvider  通过 SecurityCacheFactory.GetSecurityCacheProvider(配置名称) 获得。方法 GetIdentity、SaveIdentity、ExpireIdentity。
会员类:MemberShip  方法 ValidateUser。
角色类:Roles   方法 CreateRole、AddUsersToRole、RemoveUserFromRole、RoleExists、GetRolesForUser。
标识:IIdentity   通过 GenericIdentity 获得,给 SaveIdentity 使用。
令牌:IToken   由 SaveIdentity 获得,给 GetIdentity 使用。

注意:
1)需要先编译项目文件,获得相应的 Assembly 之后,才可以在配置编辑工具中选择使用自定义的数据项目。
2)要使用 Security 程序块,需要对工程的目标数据库进行 ASP.NET 注册,运行 aspnet_regsql.exe(在 Microsoft.NET\Framework\v2.0.50727 目录下) 进行操作即可。

转载于:https://www.cnblogs.com/glowworm/archive/2010/04/27/1722281.html

企业库(V4.1)入门学习手记相关推荐

  1. 最新版 Enterprise Library 企业库 V4.1 中文学习手册

    Enterprise Library for .Net Framework 3.5 – EntLib v4.1 是patterns & practices 小组为.NET Framework ...

  2. webpack入门学习手记(一)

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  3. webpack入门学习手记(一) 1

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  4. webpack入门学习手记(三)

    本人微信公众号:前端修炼之路,欢迎关注. 距离上一次更新这个系列,过去了两天.最近实在是有点忙,没有挤出时间整理.感觉日更还真是困难? 以下是正文. 管理资源 如果看过之前的系列文章,应该会有一个学习 ...

  5. Enterprise Library 企业库 V4.1

    Enterprise Library for .Net Framework 3.5 – EntLib v4.1 是patterns & practices 小组为.NET Framework ...

  6. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...

    本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...

  7. [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...

    在完成了后,今天开始介绍企业库中的新模块:Cryptographer(加密模块),这个模块在日常的大多数项目的作用非常重要,例如:网站会员密码.身份证号.网站配置等,通过对信息进行加密可以保证项目数据 ...

  8. (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...

    原文地址:http://www.cnblogs.com/kyo-yo/archive/2010/11/01/Learning-EntLib-Tenth-Decoupling-Your-System-U ...

  9. [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART5——使用Unity自身的拦截器...

    在前一篇文章中,介绍了如何使用Unity来接管PIAB进行拦截操作,而Unity自身也提供了类似于ICallHandler的拦截处理程序--IInterceptionBehavior,今天这篇文章就是 ...

最新文章

  1. delphi的dbgrid控件点击title排序
  2. 逻辑地址、线性地址、物理地址和虚拟地址
  3. mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计
  4. 论文浅尝 | 基于深度序列模型的知识图谱补全
  5. mysql的优化-添加环境变量启动服务
  6. Codeforces 776D The Door Problem
  7. 深入理解DDD中的聚合
  8. Deepin-安装QQ音乐(Windows程序)
  9. 如何快速将文件中的空格更换成逗号(图文详解)
  10. Fiddler4入门--手机抓包工具安装和使用说明
  11. iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上(转)
  12. 基于ASP的高校宿舍管理系统设计与实现
  13. linux中的last命令,linux系统中last命令的用法
  14. 【网络】MTU理解、MTU对上层协议的影响
  15. 学习笔记(02):Java小白修炼手册-工欲善其事必先利其器,掌握Java开发工具
  16. 基于奇异值分解的图像压缩和信息隐藏
  17. 静态网网页设计成品下载
  18. python学习之文章中单词出现频率统计
  19. python简单实现剪刀石头布小游戏
  20. 广度搜索与深度搜索的区别

热门文章

  1. java调用app接口代码_java servlet手机app访问接口(二)短信验证
  2. Linux下Elasticsearch-2.4.0的安装与简单配置(单节点)Head插件安装(已测试)
  3. 2016下半年网络规划设计师考试下午真题
  4. Android之父深入解析Android
  5. java 加载资源_在Java中加载资源的首选方式
  6. c语言中整形精确到后面几位,C语言中普通整型变数在记忆体中占几个位元组
  7. 不懂电脑如何买电脑_如何选择性价比高的电脑 买电脑要注意什么
  8. navicat修改表的主键自增长报错
  9. nw.js package一般设置
  10. 那些查了无数遍的问题