Castle.ActiveRecord
    空闲下来了,回想当时没有完成的任务,Castle的学习就是其中一项.
    在网上找了许多的资料,其中Terrylee老师的算是比较经典的.打算看一点做一点,一步一步的走~遇到的问题写出来,供大家参考讨论.
Castleproject.Org官网上FAQ里就"What is Castle Project?"说道:"An umbrella for projects that share the same goal: boost productivity while promoting good code and good design. ".对~good code and good design,为了这个CODE和DESIGN,我们来一点一点的挖掘Castle里的秘密吧.

第一部分,紧跟
Terrylee老师的步伐,我先开始通过Castle.ActiveRecord了解Castle.
    开始,先跟大家说一下, Castle.ActiveRecord是Castle中提供的一个数据访问框架,它在底层封装了NHibernate的操作,使用特性来代替映射文件,这样咱们就不必再去为编写.hbm.xml文件而费心了(虽然有了代码生成器).
    
教程用例将直接套用Terrylee老师的教程用例,并在里面添加上我的一些相应经历,请大家谅解(自己编写例子真的很烦啊,呵呵)
    练习数据表Users:

Castle.ActiveRecord 学与练[1]CREATE TABLE [dbo].[Users] (
Castle.ActiveRecord 学与练[1]    
[LogonID] [int] IDENTITY (11NOT NULL
 ,
Castle.ActiveRecord 学与练[1]    
[LogonName] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL
 ,
Castle.ActiveRecord 学与练[1]    
[Password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL
 ,
Castle.ActiveRecord 学与练[1]    
[EmailAddress] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL
 ,
Castle.ActiveRecord 学与练[1]    
[LastLogon] [datetime] NULL
 
Castle.ActiveRecord 学与练[1]
ON [PRIMARY]

Castle.ActiveRecord 学与练[1]
GO

第二部分,实体类的编码.

 1Castle.ActiveRecord 学与练[1]using System;
 2Castle.ActiveRecord 学与练[1]using
 System.Collections.Generic;
 3Castle.ActiveRecord 学与练[1]using
 System.Text;
 4Castle.ActiveRecord 学与练[1]using
 Castle.ActiveRecord;
 5Castle.ActiveRecord 学与练[1]using
 System.Collections;
 6Castle.ActiveRecord 学与练[1]using
 Castle.ActiveRecord.Framework;
 7
Castle.ActiveRecord 学与练[1]
 8Castle.ActiveRecord 学与练[1]namespace
 cn.Guy.Training.User
 9}

    首先我们来看代码前端类声明的部分:
    [ActiveRecord("Users")]
    public class UserEntity : ActiveRecordBase
    UserEntity类继承于ActiveRecordBase,并且为UserEntity类添加了[ActiveRecord("Users")]的特性,意指UserEntity所对应的数据库表为Users.
    然后再来看属性定义部分:
    [PrimaryKey(PrimaryKeyType.Identity, "LogonID")]
    public int Id
    {
         get { return _id; }
         set { _id = value; }
    }
    Id这个属性返回值为INT类型,并且为它添加了一个
[PrimaryKey(PrimaryKeyType.Identity, "LogonID")]的特性,意指Id所对应的数据库表字段为LogonID,主键且为自增类型.
    注:如果属性名和字段名一致,[Property()]中可为空.
    最后,就练习中写到的几个静态方法向大家说明一下:
    从ActiveRecordBase里可以直接继承到一些最基本的方法,比如:Create()Update()Delete()Save()及相应扩展方法.
    咱们通过这些基本的方法,对Users这个表可以进行INSERT,UPDATE,SELECT操作,以达到练习的目的.
    在执行这些方法前,需要对ActiveRecord进行数据库配置,在这里,我只介绍一种方法,也是最常用的方法:配置文件.

 1Castle.ActiveRecord 学与练[1]<?xml version="1.0" encoding="utf-8" ?>
 2Castle.ActiveRecord 学与练[1]<configuration>
 3Castle.ActiveRecord 学与练[1]    <configSections>
 4Castle.ActiveRecord 学与练[1]        <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
 5Castle.ActiveRecord 学与练[1]    </configSections>
 6Castle.ActiveRecord 学与练[1]    <activerecord>
 7Castle.ActiveRecord 学与练[1]        <config>
 8Castle.ActiveRecord 学与练[1]            <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
 9Castle.ActiveRecord 学与练[1]            <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
10Castle.ActiveRecord 学与练[1]            <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
11Castle.ActiveRecord 学与练[1]            <add key="hibernate.connection.connection_string" value="UID=sa;Password=love;Initial Catalog=CastleTraining;Data Source=GUYZ\GUYZ2000" />
12Castle.ActiveRecord 学与练[1]        </config>
13Castle.ActiveRecord 学与练[1]    </activerecord>
14Castle.ActiveRecord 学与练[1]</configuration>

这样,实体部分的编码就等于告一段落了.
第三部分:测试
    我是新建了一应用程序进行测试,因为我个人更喜欢界面化的操作,交互的快感,呵呵!
    

 1Castle.ActiveRecord 学与练[1]using System;
 2Castle.ActiveRecord 学与练[1]using
 System.Collections.Generic;
 3Castle.ActiveRecord 学与练[1]using
 System.ComponentModel;
 4Castle.ActiveRecord 学与练[1]using
 System.Data;
 5Castle.ActiveRecord 学与练[1]using
 System.Drawing;
 6Castle.ActiveRecord 学与练[1]using
 System.Text;
 7Castle.ActiveRecord 学与练[1]using
 System.Windows.Forms;
 8Castle.ActiveRecord 学与练[1]using
 Castle.ActiveRecord.Framework;
 9Castle.ActiveRecord 学与练[1]using
 Castle.ActiveRecord;
10Castle.ActiveRecord 学与练[1]using
 System.Collections;
11
Castle.ActiveRecord 学与练[1]
12Castle.ActiveRecord 学与练[1]namespace
 cn.Guy.Training.User
13}

    大家可以看到,我在这个类的构造函数里写了这样两个语句:
    IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;
    ActiveRecordStarter.Initialize(source, typeof(UserEntity));
    从配置文件里读取配置,最后对ActiveRecordStarter进行初始化,就可以进行方法的执行了.
    
    小弟第一次发系列文章,还请高手们多多见谅.
    谢谢
Terrylee老师的教程对我的帮助.
    QQ:22566547;
    MSN:LGUYSS@GMAIL.COM;
    SITE:WWW.MOBILEBETA.NET
    

相关文章: