- 浏览: 496155 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
请您先登录,才能继续操作
Enterprise Library(企业库)给我们提供的ORM
1 引言
本文的使用的实例数据库为:Northwind
企业库版本:V5.0
下面的例子均在ASP.NET中进行演示。
ORM,Object Relation Mapper,主要是说我们的编程语言,尤其是我们使用面向对象编程语言的时候,都在使用对象,实体,Object,对象之间用属性来维护数据关系。也就是1:n,n:1,1:1,n:n等等。在配合数据库开发的时候,使用的大多是关系型数据库,关系型数据库靠关系Relation来维护数据,表现形式就是二维的数据表。
对象和关系不是一一映射的关系。就好像一张数据库的表,这样一个二维关系,映射为C#中的对象的话,可能是多个对象。还有可能几张表映射为一个对象。很少有一张表映射为一个对象。因为类的设计和数据库表的设计不是一种思路,他们的规范也不尽相同。
这时候就引出了ORM,对象和关系之间的映射。如何更好的映射?都是很多人研究的课题。我也写过一篇文章,讨论过一种实现方法。大多数的方法都是利用列名和属性名来实现映射。
其实在企业库中,至少是在V5.0中就存在这样的映射辅助类,今天就让我们来看看企业库中提供给我们的ORM映射工具。
2 正文
2.1 简单应用
在web.config文件中添加下面的配置
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<dataConfiguration defaultDatabase="sql2005dev" >
</dataConfiguration>
<connectionStrings>
<add name="sql2005dev" connectionString="server=KB-SHIWENBIN\SQL2005DEV;database=northwind;uid=sa;pwd=123.com" providerName="System.Data.SqlClient"/>
</connectionStrings>
在一个页面的后台代码中敲下如下面的代码
IRowMapper<Customer> mapper = MapBuilder<Customer>.BuildAllProperties () ;
var accessor = db.CreateSprocAccessor<Customer>("GetAllFromCustomers");
var customerData = accessor.Execute();
foreach (var c in customerData)
{
Response.Write(c.CompanyName);
Response.Write("</br>");
}
GetAllFromCustomers为存储过程的名称
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GetAllFromCustomers]
AS
BEGIN
--SET NOCOUNT ON
SELECT
[customers].[Address] AS 'Address',
[customers].[City] AS 'City',
[customers].[CompanyName] AS 'CompanyName',
[customers].[ContactName] AS 'ContactName',
[customers].[ContactTitle] AS 'ContactTitle',
[customers].[Country] AS 'Country',
[customers].[CustomerID] AS 'CustomerID',
[customers].[Fax] AS 'Fax',
[customers].[Phone] AS 'Phone',
[customers].[PostalCode] AS 'PostalCode',
[customers].[Region] AS 'Region'
FROM [dbo].[Customers] [customers]
SET NOCOUNT OFF
END
定义实体类
{
public string CustomerID { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
public string ContactTitle { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
}
这样就可以了,可以看到从数据库读取customer信息,然后映射为实体集合。database的CreateSprocAccessor方法配合存储过程使用,CreateSqlStringAccessor方法配合sql语句使用。
2.2 如何传入参数
其实我们很多时候需要执行的sql语句和存储过程都会有参数传入。这里假设我们需要执行的sql语句是
有两个参数@p1,@p2
首先我们需要自定义一个参数映射类
{
public void AssignParameters(DbCommand command, object[] parameterValues)
{
DbParameter parameter = command.CreateParameter();
parameter.ParameterName = "@p1";
parameter.Value = parameterValues[0];
command.Parameters.Add(parameter);
parameter = command.CreateParameter();
parameter.ParameterName = "@p2";
parameter.Value = parameterValues[1];
command.Parameters.Add(parameter);
}
}
然后我们将c#的代码修改一下,在创建访问器的时候指定一下参数映射实例,在执行的时候传入参数的值。
string query = "SELECT * from Customers WHERE CompanyName like @p1 and contactname like @p2";
IParameterMapper mapper = new Classes.ExampleParameterMapper ();
var accessor = db.CreateSqlStringAccessor<Customer>(query, mapper);
var customerData = accessor.Execute(new string[] { "%stock%", "%s%" });
foreach (var c in customerData)
{
Response.Write(c.CompanyName);
Response.Write("</br>");
}
这样就可以了。
2.3 定义输出结果的映射关系
2.3.1 使用默认的输出映射方法
在你创建SprocAccessor和SqlStringAccessor类的时候,或者是使用database的CreateSqlStringAccessor和CreateSpocAccessor的时候,不需要你提供输出映射的方法。默认的情况下,使用数据库结果集中的列的名称和类的属性的名称进行映射,如果一个属性没有找到匹配的列,就会抛出InvalidOperationException的异常提示。如果结果集中的列,没有类属性对应的话,就不做任何处理,忽略这个列。另外,默认的映射方法不支持集合属性的映射。
2.3.2 自定义输出映射方法
有的时候我们在映射的时候,有一些列需要特殊的处理。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 548如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 671组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 528本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5945 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 615前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 837企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 624首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 595概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 996概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 804我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8411 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9701、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 778引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 650oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 605经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 634今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 683我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 699今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 671题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
《最新版 Enterprise Library 企业库 V4[1].1 中文学习手册.pdf》提供了详细的图文教程,涵盖了Enterprise Library 4.1的安装、配置、使用方法以及各应用块的深入解析。通过阅读此手册,开发者能够快速掌握企业库的...
- **大型企业项目**:对于需要高效、稳定和可维护的企业级解决方案,Enterprise Library 提供了一套成熟的基础设施服务。 - **团队开发**:在多团队协作的环境中,使用统一的框架可以提高代码质量和一致性。 - **...
Enterprise Library 5.0是微软开发的一个开源软件框架,它主要针对企业级应用程序的开发,提供了许多可重用的、经过验证的软件组件,旨在简化常见的编程任务,并提高开发效率。这个版本在2010年发布,是该库系列的一...
《Microsoft Enterprise Library 配置》是一本专注于高效利用微软企业库(MSEL)的专业书籍,旨在帮助开发者更好地理解和应用这一强大的开发工具集。MSEL 是一套面向.NET Framework的应用程序开发框架,它提供了一...
《Microsoft.Press Developers Guide to Microsoft Enterprise Library 5 CSharp Edition Aug.2010》是微软出版社发布的一本面向开发者的指南,专门介绍如何使用微软企业库5.0的C#版本。这本书详细阐述了在C#环境中...
微软企业库(Enterprise Library)是微软提供的一套面向.NET Framework的应用程序开发框架,旨在简化常见的软件设计模式,提高开发效率和代码质量。这个版本,即3.1版,包含了丰富的中文帮助文档,为开发者提供了...
微软企业库(Microsoft Enterprise Library)是微软提供的一套面向企业级应用开发的可重用组件集合,它旨在简化常见的软件设计模式,如日志、数据访问、缓存管理、异常处理等。本实例将深入探讨如何利用微软企业库...
在Java世界中,J2EE(Java 2 Platform, Enterprise Edition)是一个用于构建企业级应用的框架,它提供了一系列的API和服务,旨在简化多层架构中的分布式应用程序开发。本篇文章将深入探讨一个名为"library"的J2EE...
本文将深入探讨“实体框架(Entity Framework)”、“微软企业库(Microsoft Enterprise Library)”以及“MVC(Model-View-Controller)”模式在.NET开发中的应用,结合提供的资源,如“Entity+Framework+教程+.doc...
1. **Microsoft.Practices.EnterpriseLibrary.Common.dll**:这是企业库的基础组件,包含了通用的服务和设施,如配置管理、日志记录、异常处理等。它为其他库提供了一致的基础设施,确保了模块间的协同工作。例如,...
1. **配置管理**:微软企业库提供了一个配置工具,使得开发者能够方便地管理和更改应用程序的配置设置,而无需修改代码。5.0版本可能包含对配置界面的优化和增强,支持更灵活的配置策略。 2. **异常处理**:异常...
DAAB(Data Access Application Block)是微软.NET框架中的一部分,它属于微软企业库(Enterprise Library)的一个组件。企业库是一系列可重用的、配置驱动的.NET类库,旨在帮助开发者解决应用程序开发中的常见问题...
【企业程序库(Enterprise Library)】是微软推出的一个开源组件集合,主要面向.NET开发者,旨在帮助企业解决在开发企业级应用时遇到的常见问题。这个框架集合了多个应用程序块(Application Blocks),每个块专注于...
标题中的"org.hibernate.ejb-library-3.4.0.GA"是Hibernate Entity Beans的一个特定版本,它是Hibernate框架的一部分,专门用于处理Java Enterprise Edition (EE)环境中的持久化。Hibernate是著名的对象关系映射...
其次,提到的"微软企业库",全称是Microsoft Enterprise Library,是一个包含多个应用程序块的集合,这些块提供了常见的企业级功能,如数据访问、日志记录、异常处理等。开发者可以将这些块集成到他们的项目中,以...
5. **EnterpriseLibrary**: 微软的企业库,它包含了数据访问应用块(Data Access Application Block, DAAB),提供了一种抽象的、统一的方式来访问数据库。DAAB支持多种数据库,包括SQL Server、Oracle等,同时提供...
这些库包含了多种组件和服务,为开发者提供了构建可扩展、健壮且高度分布式的企业级应用的框架。在这个压缩包中,你可能会找到如下的关键组件和API: 1. **Servlet API**:Servlet是Java Web开发的核心,用于处理...
企业信息管理系统(Enterprise Information Management System,简称EIMS)是一种用于整合和管理企业内部及外部信息的软件应用。在Java Web开发环境下构建EIMS,利用了Java的强大功能和Web技术的灵活性,为企业提供...
3. **JSP标签库**:例如JSTL(JavaServer Pages Standard Tag Library)和EL(Expression Language),提供了一种简化页面开发的方式,使得开发者能更高效地处理逻辑和数据展示。 4. **JavaBean**:JavaBean是符合...
标题 "org.hibernate.ejb-library-3.4.0.GA-A" 指示这是一个与Hibernate相关的库,特别针对EJB(Enterprise JavaBeans)版本3.4.0,并且是为OSGi环境优化的。描述中提到它适用于在Virgo Jetty服务器上进行Web开发,...