`

Enterprise Library(企业库)给我们提供的ORM

阅读更多

  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文件中添加下面的配置

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><configSections>
    
<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>

 

  

  在一个页面的后台代码中敲下如下面的代码

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> Database db=DatabaseFactory.CreateDatabase ();
                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为存储过程的名称

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->set ANSI_NULLS ON
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



 

 

  定义实体类

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> public class Customer
    {
        
public string CustomerID { getset; }
        
public string CompanyName { getset; }
        
public string ContactName { getset; }
        
public string ContactTitle { getset; }
        
public string Address { getset; }
        
public string City { getset; }
        
public string Region { getset; }
        
public string PostalCode { getset; }
        
public string Country { getset; }
        
public string Phone { getset; }
        
public string Fax { getset; }

    }

 

  这样就可以了,可以看到从数据库读取customer信息,然后映射为实体集合。database的CreateSprocAccessor方法配合存储过程使用,CreateSqlStringAccessor方法配合sql语句使用。

   

  2.2 如何传入参数

   其实我们很多时候需要执行的sql语句和存储过程都会有参数传入。这里假设我们需要执行的sql语句是

  

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->SELECT * from Customers WHERE CompanyName like @p1 and contactname like @p2

 

  有两个参数@p1,@p2

  首先我们需要自定义一个参数映射类

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> public class ExampleParameterMapper : IParameterMapper
    {
        
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#的代码修改一下,在创建访问器的时候指定一下参数映射实例,在执行的时候传入参数的值。

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> Database db=DatabaseFactory.CreateDatabase ();

                
                
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 自定义输出映射方法

  有的时候我们在映射的时候,有一些列需要特殊的处理。  

分享到:
评论

相关推荐

    Enterprise Library 4.1文档

    《最新版 Enterprise Library 企业库 V4[1].1 中文学习手册.pdf》提供了详细的图文教程,涵盖了Enterprise Library 4.1的安装、配置、使用方法以及各应用块的深入解析。通过阅读此手册,开发者能够快速掌握企业库的...

    Microsoft Enterprise Library 5.0

    - **大型企业项目**:对于需要高效、稳定和可维护的企业级解决方案,Enterprise Library 提供了一套成熟的基础设施服务。 - **团队开发**:在多团队协作的环境中,使用统一的框架可以提高代码质量和一致性。 - **...

    Enterprise Library 5.0

    Enterprise Library 5.0是微软开发的一个开源软件框架,它主要针对企业级应用程序的开发,提供了许多可重用的、经过验证的软件组件,旨在简化常见的编程任务,并提高开发效率。这个版本在2010年发布,是该库系列的一...

    Microsoft Enterprise Library配置

    《Microsoft Enterprise Library 配置》是一本专注于高效利用微软企业库(MSEL)的专业书籍,旨在帮助开发者更好地理解和应用这一强大的开发工具集。MSEL 是一套面向.NET Framework的应用程序开发框架,它提供了一...

    Microsoft.Press.Developers.Guide.to.Microsoft.Enterprise.Library.5.CSharp.Edition.Aug.2010.rar

    《Microsoft.Press Developers Guide to Microsoft Enterprise Library 5 CSharp Edition Aug.2010》是微软出版社发布的一本面向开发者的指南,专门介绍如何使用微软企业库5.0的C#版本。这本书详细阐述了在C#环境中...

    微软企业库3.1版中文帮助

    微软企业库(Enterprise Library)是微软提供的一套面向.NET Framework的应用程序开发框架,旨在简化常见的软件设计模式,提高开发效率和代码质量。这个版本,即3.1版,包含了丰富的中文帮助文档,为开发者提供了...

    微软企业库实例

    微软企业库(Microsoft Enterprise Library)是微软提供的一套面向企业级应用开发的可重用组件集合,它旨在简化常见的软件设计模式,如日志、数据访问、缓存管理、异常处理等。本实例将深入探讨如何利用微软企业库...

    j2ee library项目源码给大家分享

    在Java世界中,J2EE(Java 2 Platform, Enterprise Edition)是一个用于构建企业级应用的框架,它提供了一系列的API和服务,旨在简化多层架构中的分布式应用程序开发。本篇文章将深入探讨一个名为"library"的J2EE...

    实体框架+微软企业库+MVC

    本文将深入探讨“实体框架(Entity Framework)”、“微软企业库(Microsoft Enterprise Library)”以及“MVC(Model-View-Controller)”模式在.NET开发中的应用,结合提供的资源,如“Entity+Framework+教程+.doc...

    微软的企业库文件,当今开发的最好最多引用文件

    1. **Microsoft.Practices.EnterpriseLibrary.Common.dll**:这是企业库的基础组件,包含了通用的服务和设施,如配置管理、日志记录、异常处理等。它为其他库提供了一致的基础设施,确保了模块间的协同工作。例如,...

    微软企业库5.0说明文档,英文版

    1. **配置管理**:微软企业库提供了一个配置工具,使得开发者能够方便地管理和更改应用程序的配置设置,而无需修改代码。5.0版本可能包含对配置界面的优化和增强,支持更灵活的配置策略。 2. **异常处理**:异常...

    DAAB 企业库 微软企业库

    DAAB(Data Access Application Block)是微软.NET框架中的一部分,它属于微软企业库(Enterprise Library)的一个组件。企业库是一系列可重用的、配置驱动的.NET类库,旨在帮助开发者解决应用程序开发中的常见问题...

    DEV 205 企业程序库 王筱东

    【企业程序库(Enterprise Library)】是微软推出的一个开源组件集合,主要面向.NET开发者,旨在帮助企业解决在开发企业级应用时遇到的常见问题。这个框架集合了多个应用程序块(Application Blocks),每个块专注于...

    org.hibernate.ejb-library-3.4.0.GA

    标题中的"org.hibernate.ejb-library-3.4.0.GA"是Hibernate Entity Beans的一个特定版本,它是Hibernate框架的一部分,专门用于处理Java Enterprise Edition (EE)环境中的持久化。Hibernate是著名的对象关系映射...

    C# 快速开发框架之代码生成工具

    其次,提到的"微软企业库",全称是Microsoft Enterprise Library,是一个包含多个应用程序块的集合,这些块提供了常见的企业级功能,如数据访问、日志记录、异常处理等。开发者可以将这些块集成到他们的项目中,以...

    C# 生成多种DAL层次代码

    5. **EnterpriseLibrary**: 微软的企业库,它包含了数据访问应用块(Data Access Application Block, DAAB),提供了一种抽象的、统一的方式来访问数据库。DAAB支持多种数据库,包括SQL Server、Oracle等,同时提供...

    JAVAEE_5_Libraries

    这些库包含了多种组件和服务,为开发者提供了构建可扩展、健壮且高度分布式的企业级应用的框架。在这个压缩包中,你可能会找到如下的关键组件和API: 1. **Servlet API**:Servlet是Java Web开发的核心,用于处理...

    企业信息管理系统EIMS

    企业信息管理系统(Enterprise Information Management System,简称EIMS)是一种用于整合和管理企业内部及外部信息的软件应用。在Java Web开发环境下构建EIMS,利用了Java的强大功能和Web技术的灵活性,为企业提供...

    java 开发 J2EE企业级应用

    3. **JSP标签库**:例如JSTL(JavaServer Pages Standard Tag Library)和EL(Expression Language),提供了一种简化页面开发的方式,使得开发者能更高效地处理逻辑和数据展示。 4. **JavaBean**:JavaBean是符合...

    org.hibernate.ejb-library-3.4.0.GA-A

    标题 "org.hibernate.ejb-library-3.4.0.GA-A" 指示这是一个与Hibernate相关的库,特别针对EJB(Enterprise JavaBeans)版本3.4.0,并且是为OSGi环境优化的。描述中提到它适用于在Virgo Jetty服务器上进行Web开发,...

Global site tag (gtag.js) - Google Analytics