MiniAccess的运行环境

  1. .Net Framework 3.5以上版本的支持,使用了范型、动态对象等特性,所以不支持Framework 3.5以下的版本。
  2. 可以手工书写实体类,但是一般的使用是通过CodeSmith生成实体类,这时,需要使用CodeSmith 3.0以上版本。

说明:MiniAccess原来需要微软企业库中数据访问ApplicationBlock的支持。后来发现DAAB应用程序块只是一个System.Data的很轻很薄的包装,因而直接把相关的源代码直接嵌入到MiniAccess中。

基本的使用步骤的演示

在源代码文件中的Demo和DemoSite演示了MiniAccess的基本使用。使用MiniAccess的要点包括如下几点:

  1. 在项目中引用Ruandao.MiniAccess.dll
  2. 使用CodeSmithTemplate中的模板生成数据访问层,可以参照MiniAccess.csp编写。
  3. 在App.config或web.config中增加数据提供者的配置数据。
  4. 在数据访问程序集所在位置或者是App_Data文件夹下编写名为<数据访问程序集名称>.mdm.xml的O-R映射文件。

上述步骤中完成1、2两步就可以编译生成数据访问的程序集了。3、4两步的作用是配置数据访问程序集在运行时的环境信息,在使用Codesmith生成数据访问代码文件时,已经以注释的形式生成了默认的OR映射文件的内容,可以直接复制到mdm.xml中文件中即可。

下面以Demo为例,说明基本的操作过程。

首先,建立建立解决方案和数据库

  1. 在VisualStudio中创建一个解决方案,然后在解决方案中添加名为Demo的C#类库项目和一个网站DemoSite。 
  2. 将下载的MiniAccess中的CodeSmithTemplate文件夹复制到解决方案文件夹下。
  3. 在解决方案文件夹下建立Reference文件夹,把Ruandao.MiniAccess.dll复制到该文件夹下。
  4. 在SqlServer中建立示例数据库DemoDatabase,包括两张表Category和Product,建立两张表之间一对多的关系,并在数据库中录入一下数据。
    创建数据库、建立表结构、录入数据的屏幕截图如下,这些截图是在Visual Studio 2010中完成的,使用的数据是express版本。

    CreateDemoDatabase_thumb1_thumb

    CreateDemoDatabaseDialog_thumb1_thum

    CreateTable_thumb1_thumb

    TableStructure_thumb1_thumb

     

其次,建立访问数据库的类库

  1. 在VisualStudio的资源管理器中,或者在Windows的资源管理器中,创建codesmith的项目文件。一般的,该文件位于项目源代码的数据访问层所在的文件夹内,比如项目的数据访问层的源代码位于命名为EntityAccess文件夹下,数据库名称为DemoDatabase,那么就在该文件夹下建立DemoAccess.csp的文件,文件内容如下所示:
       1:  <?xml version="1.0"?>
       2:  <codeSmith xmlns="http://www.codesmithtools.com/schema/csp.xsd">
       3:    <propertySets>
       4:      <propertySet output="DemoAccess.cs" template="..\..\CodeSmithTemplate\MiniAccess.cst">
       5:        <property name="DeveloperName">Coolman</property>
       6:        <property name="Database">
       7:          <connectionString>Data Source=.\sqlexpress;Initial Catalog=DemoDatabase;Integrated Security=True;Pooling=False</connectionString>
       8:          <providerType>SchemaExplorer.SqlSchemaProvider,SchemaExplorer.SqlSchemaProvider </providerType>
       9:        </property>
      10:        <property name="Namespace">Demo.EntityAccess</property>
      11:        <property name="Provider"></property>
      12:        <property name="AccessClass"></property>
      13:        <property name="Tables"></property>
      14:      </propertySet>
      15:    </propertySets>
      16:  </codeSmith>
  2. 在该文件中,propertyset中的output指定要生成的源代码文件,template指定MiniAccess.cst所在位置,可以使用相对路径。
    DeveloperName:指定开发者的名字。
    Database:指定要处理的数据库,需要进一步指出数据库的连接字符串和CodeSmith中用来分析该数据库的架构提供者。
    Namespace:生成的实体的命名空间,缺省是<数据库名字>.EntityAccess。
    Provider:Ado.Net中的数据提供者,目前支持SqlServer,数据库,计划中要支持的数据库还有Sqlite。
    AccessClass:存取数据库的类型名称。通过该类型中提供的方法可以实现数据库中所有表的数据存取。
    Tables:指出要生成数据实体类型的表的名字,不指定该属性表示为数据库中所有用户表都生成实体类型,若要指定多个表名,请使用逗号分隔。

  3. 用右键点击DemoAccess.csp文件,选择CodeSmith快捷菜单中的生成命令,即可生成数据存取类的源代码文件:DemoAccess.cs。打开DemoAccess.cs文件,文件开始出一注释形式生成了默认的OR映射文件。

最后,在一个网站中引用数据访问层类库

  1. 在Demo项目中添加对Ruandao.MiniAccess.dll的引用,然后就可以成功编译项目,得到数据访问层了。
  2. 在网站中添加对Demo项目的引用,并在App_Data或者bin文件夹下建立Demo.mdm.xml文件,并将DemoAccess.cs中的OR映射数据复制到该文件中。 文件内容如下:
  3. 在web.config中设置数据库的连接字符串,内容如下:
       1:  <configuration>
       2:      <configSections>
       3:          <section name="miniAccess" type="Ruandao.MiniAccess.MiniAccessSection,Ruandao.MiniAccess" />
       4:      </configSections>
       5:   
       6:      <miniAccess>
       7:          <dataProviders>
       8:              <add name="DemoDatabase" accessType="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DemoDatabase;Integrated Security=True" />
       9:          </dataProviders>
      10:      </miniAccess>
      11:   
      12:      <system.web>
      13:          <compilation debug="false" targetFramework="4.0" />
      14:      </system.web>
      15:   
      16:  </configuration>
  4. 至此,即可在页面中使用DemoAccess.cs中的类型存取数据库了, 比如书写页面列表显示数据库中产品数据。 例如编写如下的default.aspx文件:
       1:  <%@ Page Language="C#" %>
       2:  <%@ Import Namespace="Demo.EntityAccess" %>
       3:   
       4:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       5:   
       6:  <script runat="server">
       7:   
       8:  </script>
       9:   
      10:  <html xmlns="http://www.w3.org/1999/xhtml">
      11:  <head runat="server">
      12:      <title></title>
      13:  </head>
      14:  <body>
      15:      <form id="form1" runat="server">
      16:      <div>
      17:          <table border="1" cellpadding="5" style="border-collapse:collapse;" >
      18:          <tr>
      19:              <th>产品编号</th>
      20:              <th>分类</th>
      21:              <th>标题</th>
      22:              <th>价格</th>
      23:              <th>说明</th>
      24:          </tr>
      25:          <% foreach (ProductEntity entity in ProductEntity.GetAllEntities())
      26:             { %>
      27:              <tr>
      28:                  <td><%= entity.ProductId %></td>
      29:                  <td><%= entity.GetCatelog().Title %></td>
      30:                  <td><%= entity.Title %></td>
      31:                  <td><%= entity.Price.ToString() %></td>
      32:                  <td><%= entity.Description %></td>
      33:              </tr>
      34:          <%} %>
      35:          </table>
      36:      </div>
      37:      </form>
      38:  </body>
      39:  </html>

 

页面显示结果如下:

DefaultPage_thumb1_thumb