企业库(V4.1)入门学习手记

企业库整体概览

引用 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/p/1722281.html