[翻译]数据层(DAL)自动生成

Data Access Layer Auto Generation Library

英文源文档 <http://www.codeproject.com/KB/aspnet/auto_generation_library.aspx>
翻译:
白水  引用请注明出处 <敏捷学院>

源代码下载:http://dev.mjxy.cn/a-Data-Layer-automatically-generated-library.aspx

介绍

数据访问层(DAL)几乎是所有体系中很重要的一部分。我遇到的一个难题就是为大型数据库创建DAL,而维持这些数据库的DAL简直就是另一个噩梦。因此我认为解决这个问题的办法就是自动生成DAL层。

代码使用

在ASP.NET项目中生成DAL代码参见以下步骤:

  1. 为项目添加DalProvider.dll引用,它是一个自动生成DAL的库。
  2. 添加下面的配置到web.config中

                 

 
1 <system.web>
2     <compilation debug="true">
3         <buildProviders>
4            <add extension=".dal"    type="AnoopsDALGenerator.DalProvider"/>
5         <buildProviders>
6     </compilation>
7 </system.web>

                 这个意思是编译允许扩展名为.dal的文件添加到项目中。

  1. 在App_Code目录添加XML文件扩展名为".dal"
 
1<dal>
2  <connectionString>
3     Data Source =XXXXX; Initial Catalog = XXXXX;User Id =XXXXX; Password=XXXXX
4  </connectionString>
5  <nameSpace>DAL1</nameSpace>
6</dal>

          在这个以dal为根标签的配置文件中,定义了链接数据的字符串,还有访问自动生成代码的命名空间。

  1. 编译你的ASP.NET项目。生成的DAL代码具有以下特点:
  2. 命名空间是 “DAL1”这个在XML文件中指定。
  3. 所有的表都会被生成为类,表中的列对应生成类的字段和属性,它们的名称是使用"Col"+列名来表示。这样使得用户可以创建表的对象

    DAL1.TableName table1 = new DAL1.TableName();

            tabel1.ColColumnName1 = "2";

            table2.ColColumnName2 = "Trial";

            Response.Write ("Data in column2:" +  table2.ColColumnName2);

  • 所有访问存储过程的方法都定义在 DataProcedure类中。因此,要访问一个存储过程只需要调用("Access"+存储过程名)的方法即可。
     

             DAL2.DataProcedure dbObject = new DAL2.DataProcedure();

            DataTable dataResult=new DataTable();

           int returnStatus = dbObject.AccessStoredProcedureName(ref dataResult, "21", "Thomas", "Atlas", "ITDept");

            if (returnStatus>

程序使用一个 datatable的对象传递给存储过程对应的方法来接收返回的数据。

代码

代码很多但是很简单。这个库的工作流程如下:

  • 在编译过程中从XML文件提取连接字符串和命名空间
  • 查询 systemobjects表和systemcolumns表,分别列出表和列。

                --To extract the table information from database                   

                 Select * from sysobjects where type = 'u'

                --To extract the column information with respect to the table

                  Select * from syscolumns根据表名称生成类,根据列名称生成成员变量

  • 创建一个为DataProcedure的类来,以便保存调用存储过程对应的方法。
  • 查询systemobjects表列出所有的存储过程

                Select * from sysobjects where type = 'p' and category = 0

  • 查询systemcolumns表,获取各个存储过程的参数信息

           

 
01SELECT
02  
03param.name AS [Name],
04  
05ISNULL(baset.name, N'') AS [SystemType],
06  
07CAST(CASE WHEN baset.name IN (N'char', N'varchar', N'binary', N'varbinary',
08  
09    N'nchar', N'nvarchar')
10  
11THEN param.prec ELSE param.length END AS int) AS [Length],
12  
13CAST(param.xprec AS int) AS [NumericPrecision],
14  
15CAST(param.xscale AS int) AS [NumericScale],
16  
17null AS [DefaultValue],
18  
19CAST(
20  
21    CASE param.isoutparam WHEN 1 THEN param.isoutparam WHEN 0 THEN
22  
23       CASE param.name WHEN ''
24  
25THEN 1 ELSE 0 END END AS bit) AS [IsOutputParameter]
26  
27FROM
28  
29dbo.sysobjects AS sp
30  
31INNER JOIN sysusers AS ssp ON ssp.uid = sp.uid
32  
33INNER JOIN syscolumns AS param ON (param.number = 1) AND (param.id=sp.id)
34  
35LEFT OUTER JOIN systypes AS baset ON baset.xusertype =
36  
37    param.xtype and baset.xuserty
38  
39pe = baset.xtype
40  
41WHERE
42  
43 (sp.xtype = N'P' OR sp.xtype = N'RF')and(sp.id= ?  and ssp.name=N'dbo')
44  
45ORDER BY
46  
47CAST(param.colid AS int) ASC
  • 根据这些信息生成访问存储过程的对应的方法

更多内容参见:http://dev.mjxy.cn/a-Data-Layer-automatically-generated-library.aspx

转载于:https://www.cnblogs.com/xingquan/archive/2011/07/19/2110872.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值