收藏 分销(赏)

微软企业库学习手册模板.docx

上传人:精**** 文档编号:2957495 上传时间:2024-06-12 格式:DOCX 页数:20 大小:167.28KB
下载 相关 举报
微软企业库学习手册模板.docx_第1页
第1页 / 共20页
微软企业库学习手册模板.docx_第2页
第2页 / 共20页
微软企业库学习手册模板.docx_第3页
第3页 / 共20页
微软企业库学习手册模板.docx_第4页
第4页 / 共20页
微软企业库学习手册模板.docx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、微软企业库5.0 学习之路第一步、基础入门一、什么是企业库? 企业库包含一系列应用程序模块和关键架构。这些高复用组件意在帮助开发者处理部分共同企业开发问题。 企业库同时提供高可配置特征,使我们管理反复工作愈加轻易,比如我们知道在应用很多地方发生横切关注点。包含像日志统计、缓存、异常管理等。另外,它提供依靠注入容器能够简化和分解你设计,使她们愈加可试验和轻易了解,帮助你创建愈加高性能设计和多种应用。 二、使用企业库3个简单步骤: 1.引用和配置你需要程序集。 2.经过企业库配置应用。 3.在你代码中创建和使用企业库对象。 三、企业库好处: 应用模块帮助处理开发者从一个项目到另一个项目面正确共同问

2、题。她们设计封装了微软推荐做法,这些全部是基于微软框架应用开发。比如,数据访问应用模块提供了对ADO.NET访问最频繁使用特征。在一些情况下,应用模块还添加了部分基础类库没有直接提供相关功效。 四、企业库目标: 1.一致。全部企业库模块全部坚持一致设计模式和实现方法。 2.可扩展性。全部应用模块包含定义扩展点,许可开发人员经过添加自己代码定制应用模块行为。 3.易用性。企业库提供了很多实用性东西,包含一个图形化配置工具,简单安装过程,完成文档和示例。 4.集成。企业库应用模块被设计得能够一起很好工作,而且也被这么测试过。不过你无须一起使用她们。我们能够单独使用这些应用模块,同时这些应用模块之间

3、也有些依靠,比如在企业库关键和Unity中部分通用组件。 上面是企业库基础概念,了解了企业库相关知识后,我们能够开始来安装企业库了1、下载地址:点我进入下载页面(不是直接下载),安装后就能够使用了。这次5.0相比4.1最大改动就是整个配置工具采取了WPF重新构建和实例化和管理对象生命周期全依靠注入实现,同时支持VSSP1和VS,话说即使这次配置工具改变挺大,不过一旦熟悉了就认为比4.1好,因为能够清楚看见每个模块之间依靠关系。一、Unity和对象生成器整合 在这个版本中,用于创建对象基础技术是一个单一依靠注入容器,默认是Unity。你能够使用容器生成企业库对象实例并注入到其它对象。 企业库提供

4、一个标准接口从Unity容器中来取得定义在企业库配置中对象实例,如SqlDatabase或LogWriter.另外,注入友好实例门面处理静态门面之外是有效,因为静态门面不能用注入,不过为了向后兼容以前版本而存在。在本版本中示例中全部是用依靠注入,不过以前版本中是用静态工厂类和静态门面在这个版本中还是支持。对象生成器,一个低版本依靠注入机制在这个版本中被归入Unity中,在项目中不再需要单独引用对象生成器集。 支持Unity容器,必需引用一个被包含在企业库中Microsoft.Practices.ServiceLocation程序集。假如要使用一个第3方依靠注入容器,必需直接实现IService

5、Locator接口或经过适配器实现。二、影响全部模块改变: 1.在企业库中关键修正是使用依靠注入机制。所用应用模块和关键系统全部是用依靠注入机制,并使用Unity作为默认依靠注入容器,来创建和管理企业库对象。 2.自主容器实现经过实现Common Service Locator项目提供 IServiceLocator 接口来完成。 3.因为错误配置引发错误将提供更多有用错误信息。 4.配置系统公开了一个 fluent接口,用来为单个对象或整个应用创建和填充配置源。fluent API使得为多种情景创建配置源愈加轻易。 5.ConfigurationView类被删除. 6.部分配置元素有默认值,

6、可能不一样于以前版本隐式默认值. 7.企业库现在许可你经过另一个配置文件合成一个混合配置文件. 8.能够可经过不一样配置文件读取不一样配置信息. 9.企业库不支持XAML浏览器应用程序(XBAP). 10.WmiEnabled标志为了像前兼容仍然存在企业库中,不过在5.0中是被忽略,而且未来会被删除. 11.改善式安装许可你只安装部分应用模块及配置工具. 12.在以前版本中要做统一集成,必需添加关键企业库扩展和每个模块扩展。现在假如你只需要直接访问容器,那么只相关键扩展是必需。单独模块将自动支持。 旧功效为了保持像前兼容仍然保留,但已经不起作用。 13.FileConfigurationSou

7、rce.Save 署名已经改变,参数由3个变为2个。 14.快速入门不再包含在主安装程序中。 三、Breaking改变: 1.企业库现在抛出了一个配置错误ActivationException,之前是System.Configuration.ConfigurationErrorsException。这包含试着处理没有配置信息错误一个实例提供者。 2.以前版本在获取应用模块错误时抛出BuildFailedException错误,现在对于全部应用模块全部抛出ActivationException 3 .之前版本,在讲一个空源传到容器来调用容器时候,会抛出ArgumentNullException,

8、现在抛出NullReferenceException 4.ObjectBuilder2不再是一个单独程序集,而是集成到了Unity集合中,在项目中也不需要引用ObjectBuilder2.dll。 5.WMI支持已经从企业库中删除,除了在logging模块中WMI跟踪监听器。 6.假如你没相关闭DbDataReader,可能会造成随机、极难在您代码中找到错误,尤其是当你正在一个由TransactionScope上下文创建隐式事务下操作时。 你必需一直确保您应用程序立即关闭DbDataReader,不管是明确DbDataReader.Close方法关闭或是强迫DbDataReader释放。 7.

9、假如你使用 validator 特征必需引用 System.ComponentModel.DataAnnotations程序集。 8.为FileConfigurationSource.Save方法署名已更改。该方法有两个参数,而不是3个参数 9.Microsoft.Practices.EnterpriseLibrary.Configuration.Design.dll集合功效和其它设计时集合被一个新集合Microsoft.Practices.EnterpriseLibrary.Configuration.DesignTime.dll替换。 10,性能计数器异常从PolicyInjection.

10、CallHandlers移到 PolicyInjection 程序集。 11.包含在Policy Injection Application Block中CachingCallHandler有未处理安全漏洞,已经从Policy Injection Application Block中移除。 四、配置工具改变: 1.新企业拥有一个新GUI库和一个元数据驱动可扩展性模。 2.支持向导 3.新类型选择。 4.不支持对依靠策略Environmental Overrides 。日志模块处理Categories。 五、缓存模块改变: 1.缓存清除已被完全重写性能优化 六、数据库访问模块: 1.Execut

11、eReader, ExecuteXmlReader, ExecuteScalar, and ExecuteNonQuery方法含有异步版本。 2.包含了很多新方法和类许可你提取数据作为对象序列。比如在适宜时候使用用户端查询技术,如LINQ. 3.存在方法ExecuteReader和新方法BeginExecuteReader不接收CommandBehavior 参数。默认当调用这些方法时候这些方法 会自动设置CommandBehavior 属性到reder中用来关闭连接直到指定一个事务。 七、异常处理模块: 1.日志异常处理重新使用日志模块Log Writer and Trace Listene

12、rs 。这在之前版本中不是默认设置。 2.增加一个功效,经过ExceptionManager.Process 方法接收一个默认值并返回一个值。EntLib微软企业库5.0 学习之路第二步、使用VS+Data Access模块建立多数据库项目现在我就开始进入学习之路第二步Data Access模块,这个模块是企业库中被使用频率最高模块,它很好封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就能够很快切换数据库访问(可惜还是要重写SQL语句,没法和ORM比)。下面是我在配置企业库时候碰到问题,假如没有碰到能够略去不看(可能有点小白)注意:此处切换数据库配置必需是计算机中

13、已经安装好对应数据库访问模块,如需要进行从MS SQL向SQLite数据库变更时,计算机中必需安装好SQLite数据库访问模块(在这里我就碰到了这个问题,原来我机器上在VS开发时已经安装过SQLite数据库访问模块,不过新装了VS,在VS引用对话框中也能访问到在VS安装SQLite(不过在企业库5.0配置器中无法查看到SQLite),不过发觉更改企业库配置文件后无法访问SQLite数据库,尝试了很多方法全部没用,结果死马当活马医又重新装了一遍SQLite数据库访问模块再重新打开企业库配置器就能够看到SQLite数据库了(所以请确保在企业库编辑器中能够查看到要切换数据库,不然可能造成无法访问数据

14、库)。看下图: 回归正题,这次学习因为VS公布了,而且企业库5.0也全部支持.NET4.0,所以决定企业库学习之路采取VS进行学习(顺便熟悉下.NET4特征,毕竟企业项目不可能立马转移到.NET4.0,现在就当练手吧)好了,现在就开始进行第2步学习了,首先看下项目标结构:项目采取仿MS PetShop架构,如不了解此架构能够到此查看了解:PetShop系统架构设计其中DAL和DALSQLite层对应MS SQL和SQLite数据库,Helper为整个项目标帮助器现在来具体了解下DAL层在DAL层中引用了Helper,IDAL,EnterpriseLibrary.Common和Enterpris

15、eLibrary.Data这4个项目,其中Helper项目中有个DBHelper.cs,用于获取目前数据对象,其代码以下(采取了C#4.0语法特征,默认参数,数据库对象名默认为空,这么则会调用企业库默认数据库对象,同时也能够在调用时候赋值,这么则依据传输过来数据库对象名来创建数据库,经过这个参数我们将原来需要重载2个方法才能实现合并成了一个方法):view sourceprint?01using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;02using Microsoft.Practices.EnterpriseLib

16、rary.Data;0304namespace EntLibStudy.Helper0506public static class DBHelper0708/ 09/ 获取数据库对象10/ 11/ 数据库实例名(默认name为空,调用默认数据库实例)12/ 数据库对象13public static Database CreateDataBase(string name = )1415/return DatabaseFactory.CreateDatabase(name);16return EnterpriseLibraryContainer.Current.GetInstance(name);

17、171819在DAL层中则引用Helper来获取数据库对象,进行数据库操作,我们现在来看下具体数据库访问类编写代码,学员操作类:view sourceprint?001using System;002using System.Collections.Generic;003using System.Data;004using System.Data.Common;005using System.Linq;006using System.Text;007008using Microsoft.Practices.EnterpriseLibrary.Data;009010using EntLibStu

18、dy.Model;011using EntLibStudy.Helper;012013namespace EntLibStudy.DAL014015public class StudentService : EntLibStudy.IDAL.IStudentService016017/ 018/ 新增学生019/ 020/ 学生对象021/ 022public int Add(Student student)023024Database db = DBHelper.CreateDataBase();025StringBuilder sb = new StringBuilder();026sb.

19、Append(insert into Student values(ClassId,SID,Password,Name,Sex,Birthday,IsAdmin);SELECT IDENTITY;);027DbCommand cmd = db.GetSqlStringCommand(sb.ToString();028db.AddInParameter(cmd, ClassId, DbType.String, student.ClassId);029db.AddInParameter(cmd, SID, DbType.String, student.Sid);030db.AddInParamet

20、er(cmd, Password, DbType.String, student.Password);031db.AddInParameter(cmd, Name, DbType.String, student.Name);032db.AddInParameter(cmd, Sex, DbType.Int32, student.Sex);033db.AddInParameter(cmd, Birthday, DbType.DateTime, student.Birthday);034db.AddInParameter(cmd, IsAdmin, DbType.Int32, student.Is

21、Admin);035int id = Convert.ToInt32(db.ExecuteScalar(cmd);036return id;037038039/ 040/ 更新041/ 042/ 学生对象043/ 是否成功044public bool Update(Student student)045046Database db = DBHelper.CreateDataBase();047StringBuilder sb = new StringBuilder();048sb.Append(update Student set ClassId=ClassId,);049sb.Append(

22、SID=SID,);050sb.Append(Password=Password,);051sb.Append(Name=Name,);052sb.Append(Sex=Sex,);053sb.Append(Birthday=Birthday,);054sb.Append(IsAdmin=IsAdmin );055sb.Append( where ID=ID);056DbCommand cmd = db.GetSqlStringCommand(sb.ToString();057db.AddInParameter(cmd, ClassId, DbType.String, student.Clas

23、sId);058db.AddInParameter(cmd, SID, DbType.String, student.Sid);059db.AddInParameter(cmd, Password, DbType.String, student.Password);060db.AddInParameter(cmd, Name, DbType.String, student.Name);061db.AddInParameter(cmd, Sex, DbType.Int32, student.Sex);062db.AddInParameter(cmd, Birthday, DbType.DateT

24、ime, student.Birthday);063db.AddInParameter(cmd, IsAdmin, DbType.Int32, student.IsAdmin);064db.AddInParameter(cmd, ID, DbType.Int32, student.Id);065return db.ExecuteNonQuery(cmd) 0 ? true : false;066067068/ 069/ 删除070/ 071/ 学生ID072/ 是否成功073public bool Delete(int id)074075Database db = DBHelper.Creat

25、eDataBase();076StringBuilder sb = new StringBuilder();077sb.Append(delete from Student );078sb.Append( where ID=ID);079DbCommand cmd = db.GetSqlStringCommand(sb.ToString();080db.AddInParameter(cmd, ID, DbType.Int32, id);081082return db.ExecuteNonQuery(cmd) 0 ? true : false;083084085/ 086/ 依据学生ID查询学生

26、对象087/ 088/ 学生ID089/ 090public Student SelectById(int id)091092Student student = null;093Database db = DBHelper.CreateDataBase();094StringBuilder sb = new StringBuilder();095sb.Append(select * from Student );096sb.Append( where ID=ID);097DbCommand cmd = db.GetSqlStringCommand(sb.ToString();098db.Add

27、InParameter(cmd, ID, DbType.Int32, id);099100using (IDataReader reader = db.ExecuteReader(cmd)101102if (reader.Read()103104student = new Student()105106Id = reader.GetInt32(0),107ClassId = reader.GetInt32(1),108Sid = reader.GetString(2),109Password = reader.GetString(3),110Name = reader.GetString(4)

28、,111Sex = reader.GetInt32(5),112Birthday = reader.GetDateTime(6),113IsAdmin = reader.GetInt32(7)114;115116117118return student;119120121/ 122/ 查询全部学生信息123/ 124/ 125public IList SelectAll()126127List list = new List();128Database db = DBHelper.CreateDataBase();129StringBuilder sb = new StringBuilder(

29、);130sb.Append(select * from Student );131DbCommand cmd = db.GetSqlStringCommand(sb.ToString();132133using (IDataReader reader = db.ExecuteReader(cmd)134135while (reader.Read()136137list.Add(new Student()138139Id = reader.GetInt32(0),140ClassId = reader.GetInt32(1),141Sid = reader.GetString(2),142Pa

30、ssword = reader.GetString(3),143Name = reader.GetString(4),144Sex = reader.GetInt32(5),145Birthday = reader.GetDateTime(6),146IsAdmin = reader.GetInt32(7)147);148149150return list;151152153/ 154/ 查询全部学生信息155/ 156/ 157public IList SelectAllMapper()158159var list = new List();160Database db = DBHelper

31、.CreateDataBase();161DataAccessor studentAccessor;162/studentAccessor = db.CreateSqlStringAccessor(select * from Student,163/ MapBuilder.MapAllProperties().164/ Build()165/ );166studentAccessor = db.CreateSqlStringAccessor(select * from Student,167MapBuilder.MapAllProperties().168Map(p = p.Id).ToCol

32、umn(ID).169Map(p = p.Sid).ToColumn(SID).170Map(p = p.Password).WithFunc(f = *)./将密码转换为*,无法直接查看171Map(p = p.Name).WithFunc(ToUpperName)./将学员名称转换为大写172Map(p = p.Sex).ToColumn(Sex).173Map(p = p.Birthday).ToColumn(Birthday).174Build()175);176list = studentAccessor.Execute().ToList();177return list;17817

33、9180/ 181/ 将学员名称转换为大写182/ 183/ 184/ 185private string ToUpperName(IDataRecord dataRecord)186187var name = (string)dataRecordName;188return name.ToUpper();189190191public Student SelectBySid(string sid)192193Student student = null;194Database db = DBHelper.CreateDataBase();195StringBuilder sb = new S

34、tringBuilder();196sb.Append(select * from Student );197sb.Append( where SID=SID);198DbCommand cmd = db.GetSqlStringCommand(sb.ToString();199db.AddInParameter(cmd, SID, DbType.String, sid);200201using (IDataReader reader = db.ExecuteReader(cmd)202203if (reader.Read()204205student = new Student()20620

35、7Id = reader.GetInt32(0),208ClassId = reader.GetInt32(1),209Sid = reader.GetString(2),210Password = reader.GetString(3),211Name = reader.GetString(4),212Sex = reader.GetInt32(5),213Birthday = reader.GetDateTime(6),214IsAdmin = reader.GetInt32(7)215;216217218219return student;220221222223其中代码全部是采取了比较

36、常见老套路:1、获取数据库对象2、构建Command对象并进行实施语句及参数赋值3、经过数据库对象调用对应方法实施Command企业库在Data Access上帮我们做了比很好封装,相当于为我们提供了如SQLHelper,OracleHelper类,只不过这个帮助类转换了一个个数据库对象,经过数据库对象来对数据库数据进行操作(个人认为经过这种方法进行操作愈加直观,而且企业库对SQL语句参数操作方法也很直观:AddInParameter,AddOutParameter,GetParameterValue很好区分了参数操作,比原来SQLCommand好多了)假如仔细看了上面操作代码好友肯定发觉了类

37、中有个叫SelectAllMapper方法,这个方法采取是企业库5.0中新提供Accessor进行RowMapper来直接为实体赋值,相比原来使用reader方法取值赋值愈加优雅,只要SQL查询出来对象字段和实体对象属性一样就能够使用MapAllProperties()方法直接赋值,假如不一样话能够使用map方法来对部分属性单独映射,而且在映射时候还能够使用WithFunc来进行深入操作,在代码中我将密码进行了替换,以“*”形式展示,同时把学员名称以大写形式展示。(注:更多企业库Data Access模块方法使用能够点击这里下载微软给出学习例子和公布学习手册)在完成底层操作,现在我们就开始对企

38、业库数据库访问进行配置:在Web层Web.config上右键打开企业库配置器:Blocks-Add Data Settings-Add DataBase Connstring,新建2个数据库对象,一个是MS SqlServer数据库,一个是SQLite数据库.新建一个数据库设置新建二个数据库连接一个为EntLibStudy,另一个为EntLibSQLite我们来看下具体配置文件代码:view sourceprint?01020304050607081012131415161718192021222324252627282930至此我们就完成了Data Access模块代码编写和基础设置(具体代码请到文章底部下载源代码,类似代码则不再描述)。这时假如项目需求发生了变更,因为成本太高不能使用MS SQL SERVER,而要改用SQLite数据库时则

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服