• Castle ActiveRecord Hands On Lab(1):基本数据访问


    随着Castle1.0 RC2版本的发布,Castle逐渐走向成熟和趋于稳定,打算在近期写几篇关于ARHands On Lab。本篇文章将会介绍AR中最基本的数据访问,包括数据简单筛选和模糊查询等。在开始本Hands On Lab之前,请先下载并安装Castle 1.0 RC2。在整个Hands On Lab中,我们将使用Northwind数据库作为示例,开发环境为VS2005

    1.新建Castle ActiveRecord 项目,安装Castle之后会在新建项目对话框中看到Castle ActiveRecord项目类型,输入项目名Models

    在生成一个Models项目的同时,也为我们生成了一个Models.Test的单元测试项目,这里我们不用测试驱动的方法,直接删除该测试项目就可以了。

    2.在Models项目中添加Customer实体类,并引入命名空间:

    using Castle.ActiveRecord;

    完成后Customer实体类代码如下:

    [ActiveRecord("Customers")]

    public class Customer : ActiveRecordBase<Customer>

    {

        
    private String _customerID;

        
    private String _companyName;

        
    private String _contactName;

        
    private String _contactTitle;

        
    private String _address;

        
    private String _city;

        
    private String _region;

        
    private String _postalCode;

        
    private String _country;

        
    private String _phone;

        
    private String _fax;

        [PrimaryKey(PrimaryKeyType.Assigned)]

        
    public String CustomerID

        
    {
            
    get return _customerID; }

            
    set { _customerID = value; }
        }


        [Property]

        
    public String CompanyName

        
    {
            
    get return _companyName; }

            
    set { _companyName = value; }
        }


        [Property]

        
    public String ContactName

        
    {
            
    get return _contactName; }

            
    set { _contactName = value; }
        }


        [Property]

        
    public String ContactTitle

        
    {
            
    get return _contactTitle; }

            
    set { _contactTitle = value; }
        }


        [Property]

        
    public String Address

        
    {
            
    get return _address; }

            
    set { _address = value; }
        }


        [Property]

        
    public String City

        
    {
            
    get return _city; }

            
    set { _city = value; }
        }


        [Property]

        
    public String Region

        
    {
            
    get return _region; }

            
    set { _region = value; }
        }


        [Property]

        
    public String PostalCode

        
    {
            
    get return _postalCode; }

            
    set { _postalCode = value; }
        }


        [Property]

        
    public String Country

        
    {
            
    get return _country; }

            
    set { _country = value; }
        }


        [Property]

        
    public String Phone

        
    {
            
    get return _phone; }

            
    set { _phone = value; }
        }


        [Property]

        
    public String Fax

        
    {
            
    get return _fax; }

            
    set { _fax = value; }
        }


    }


    ActiveRecord特性来指定表名为Customers

    3.新建Web Site,删除默认的Default.aspx页面,添加一个Master页面,在页面加入如下元素:

    <div>

        
    <h2>Castle ActiveRecord Hands On Lab</h2>

        
    <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">

        
    </asp:contentplaceholder>

    </div>

    4.添加ASPX页面,并选择刚才的Master页面作为它的母版页,在ASPX页面中添加一个GridView控件,如下所示:

    GridView中添加绑定列,最终代码如下:

    <asp:GridView ID="GridView1" runat="server" Width="610px" AutoGenerateColumns="false">

        
    <Columns>

            
    <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" />

            
    <asp:BoundField DataField="ContactName" HeaderText="ContactName" />

            
    <asp:BoundField DataField="Country" HeaderText="Country" />

            
    <asp:BoundField DataField="Phone" HeaderText="Phone" />

        
    </Columns>

    </asp:GridView>

    5.编写绑定代码,在Page_Load中加入GridView的绑定代码。

    protected void Page_Load(object sender, EventArgs e)

    {
        
    this.GridView1.DataSource = Customer.FindAll();

        
    this.GridView1.DataBind();
    }

    这里使用了静态的FindAll()方法,该方法已经在泛型的ActiveRecordBase中作了定义,不需要再在实体类中实现。

    6.编写配置文件,在Web项目中添加Web.config文件,在Web.config中添加ActiveRecord配置区。

    <configSections>

      
    <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>

    </configSections>

    <connectionStrings>

      
    <add name="NorthWind" connectionString="Data Source=1DD43B143D104DB;Initial Catalog=Northwind;User ID=sa;Password=sa"/>

    </connectionStrings>

    <activerecord isWeb="true">

      
    <config>

        
    <add key="hibernate.connection.driver class" value="NHibernate.Driver.SqlClientDriver"/>

        
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/>

        
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>

        
    <add key="hibernate.connection.connection_string" value="ConnectionString = ${NorthWind}"/>

      
    </config>

    </activerecord>

    由于是Web项目,这里ActiveRecord配置区的isWeb属性必须设置为true

    7.初始化ActiveRecord实体类。在Web Site中添加Global.asax,并导入命名空间:

    <%@ Import Namespace="Models" %>

    Application_Start中添加初始化代码:

    void Application_Start(object sender, EventArgs e) 

    {
       Castle.ActiveRecord.Framework.IConfigurationSource source 
    =  System.Configuration.ConfigurationManager.GetSection("activerecord"as Castle.ActiveRecord.Framework.IConfigurationSource;

       Castle.ActiveRecord.ActiveRecordStarter.Initialize(System.Reflection.Assembly.Load(
    "Models"),source);

    }

    这里可以对单个实体类进行初始化或者加载整个程序集。

    8.至此,一个最简单的基于ActiveRecord的数据查询就做完了,运行后如下:

    9.简单的数据筛选,在ActiveRecordBase基类中提供了一个方法FindAllByProperty,可以使用属性进行查询,如我们只查询国家为“UK”的Customer,在Page_Load中修改绑定代码如下:

    protected void Page_Load(object sender, EventArgs e)

    {

        
    this.GridView1.DataSource = Customer.FindAllByProperty("Country","UK");

        
    this.GridView1.DataBind();

    }

    运行后如下:

    10.使用NHibernate的表达式来进行数据筛选。首先引入命名空间:

    using NHibernate.Expression;

    Page_Load中修改绑定代码如下所示,我们仍然查询国家为“UK”的Customer

    protected void Page_Load(object sender, EventArgs e)

    {

        
    this.GridView1.DataSource = Customer.FindAll(Expression.Eq("Country""UK"));

        
    this.GridView1.DataBind();

    }

    运行后与上面使用FindAllByProperty()方法的查询结果一致。

    11.实现简单的模糊匹配查询。在Default.aspx页面中添加一个LabelTextBoxButton控件,如下图所示,这里我们对ContactName添加模糊查询功能:

    HTML代码:

    <asp:Label ID="Label1" runat="server" Text="ContactName:"></asp:Label>

    <asp:TextBox ID="txt_Search" runat="server" Width="242px"></asp:TextBox>

    <asp:Button ID="btn_Search" runat="server" OnClick="btn_Search_Click" Text="Search" />

    切换到设计视图,双击Search按钮,添加Click事件,并编写代码,这里用HQL语句来实现,关于HQL语句可以参考http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html。完成后代码如下:

    protected void btn_Search_Click(object sender, EventArgs e)

    {

        IActiveRecordQuery query 
    = new HqlBasedQuery(typeof(Customer), "from Customer c where c.ContactName like ?""%" + this.txt_Search.Text + "%");

        
    this.GridView1.DataSource = ActiveRecordMediator.ExecuteQuery(query);

        
    this.GridView1.DataBind();

    }

    运行后在文本框中输入Mar,可以看到结果如下:

    本文简单的介绍到这里。

    示例下载:https://files.cnblogs.com/Terrylee/ARHandsOnLab.rar

    更多Castle的文章请访问《Castle 开发系列
  • 相关阅读:
    转:阅读代码
    转:三个教程
    转:C/C++程序员简历模板
    转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数
    内存偏移
    转:用C++实现的一种插件体系结构-----概述
    转:用异或实现两个数的交换的问题
    转:二级指针
    转:《链接、装载与库》里的一个错误:关于调用栈
    转:你应当如何学习C++(以及编程)(rev#1)
  • 原文地址:https://www.cnblogs.com/Terrylee/p/Castle_ActiveRecord_Hands_On_Lab_Basic_Data_Access.html
Copyright © 2020-2023  润新知