zoukankan      html  css  js  c++  java
  • 企业库(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 目录下) 进行操作即可。

  • 相关阅读:
    centos 7 配置ip
    Linux下安装jmeter
    eclipse 高效快捷键大全
    eclipse中不能找到dubbo.xsd报错”cvc-complex-type.2.4.c“的 两种解决方法
    大型网站系统架构演化之路(转)
    程序员技术练级攻略
    JSP和servlet之间的传值(总结的很全面)
    正则表达式笔记
    cenos 安装nginx并添加到service
    mac os重装php
  • 原文地址:https://www.cnblogs.com/glowworm/p/1722281.html
Copyright © 2011-2022 走看看