摘要:最近几天有时间看了一下Castle,原来它的功能是如此的强大,从数据访问框架到IOC容器,再到WEB框架,基本包括了整个开发过程中的所有东西,看来得好好学习研究一下了,并且打算把自己学习过程的一些东西记录下来。先从ActiveRecord开始吧,ActiveRecord提供的简洁的O/R映射给我留下了很深的印象,本文将通过一个简单对象的CRUD操作来带你快速走进Castle ActiveRecord
主要内容
1.概述
2.准备相关的数据表
3.编写User实体类
4.构建配置信息
5.开始CRUD操作
6.使用ActiveRecord Generator生成实体类代码
 
一.概述
如果你用过NHibernate,一定会对在NHibernate中编写.hbm.xml文件印象深刻,我也是。而在Castle ActiveRecord中,我们不用再为编写繁冗复杂的映射文件而头疼,ActiveRecordCastle中提供的一个数据访问框架,它在底层封装了NHibernate的操作,使用特性来代替映射文件,它提供的简洁的O/R映射会让你惊叹原来实现持久化数据层是那么简单。下面我们通过一个简单对象的CRUD操作来快速进入Castle ActiveRecord
 
二.准备相关的数据表
假定数据库中有这样一张用户表,用来保存用户的信息,如下
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

三.编写User实体类
首先我们新建一个User类并让它继承于ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_休闲public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_11
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
//
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14

Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

User类添加特性,其实就是告诉ActiveRecordUser类所对应的数据库中的数据表名为Users
Castle ActiveRecord学习实践(1):快速入门指南_休闲[ActiveRecord("Users")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_20
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
//
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17
}

下面我们的工作就是为实体类添加属性
Castle ActiveRecord学习实践(1):快速入门指南_休闲[ActiveRecord("Users")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_27
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
private int _id;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
private string _name;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
private string _password;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
private string _emailAddress;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
private DateTime _lastLogon;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [PrimaryKey(PrimaryKeyType.Identity, 
"LogonID")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public int Id
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_42    
{
Castle ActiveRecord学习实践(1):快速入门指南_实践_45        
get return _id; }
Castle ActiveRecord学习实践(1):快速入门指南_实践_48        
set { _id = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [Property(
"LogonName")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public string Name
Castle ActiveRecord学习实践(1):快速入门指南_实践_55    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_58        
get return _name; }
Castle ActiveRecord学习实践(1):快速入门指南_休闲_61        
set { _name = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [Property(
"Password")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public string Password
Castle ActiveRecord学习实践(1):快速入门指南_休闲_68    
{
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_71        
get return _password; }
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_74        
set { _password = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [Property(
"EmailAddress")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public string Address
Castle ActiveRecord学习实践(1):快速入门指南_实践_81    
{
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_84        
get return _emailAddress; }
Castle ActiveRecord学习实践(1):快速入门指南_休闲_87        
set { _emailAddress = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [Property(
"LastLogon")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public DateTime LastLogon
Castle ActiveRecord学习实践(1):快速入门指南_实践_94    
{
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_97        
get return _lastLogon; }
Castle ActiveRecord学习实践(1):快速入门指南_实践_100        
set {_lastLogon = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

大家可能注意到了,每一个属性上面都加上了特性[Property()]。简单的说明一下,这里用[PrimaryKey]特性指定Id作为主键,并且说明了主键的类型为自增型的,用PrimaryKeyType.Identity来说明,在后续文章中我会详细说明的。如果属性名和字段名一致,[Property()]中可以为空,也可以写上字段的名字。
下一步我们为实体类根据需要加上静态的操作方法,至于Create()Update()Delete()Save()等方法则会直接从ActiveRecordBase基类中继承
Castle ActiveRecord学习实践(1):快速入门指南_休闲[ActiveRecord("Users")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_107
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
//……
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public static void DeleteAll()
Castle ActiveRecord学习实践(1):快速入门指南_实践_113    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        DeleteAll( 
typeof(User) );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public static IList FindAll()
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_120    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
return (IList) FindAll( typeof(User) );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public static User Find(int id)
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_127    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
return (User) FindByPrimaryKey( typeof(User), id );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}
 
整个完成后的实体类代码
Castle ActiveRecord学习实践(1):快速入门指南_休闲using System;
Castle ActiveRecord学习实践(1):快速入门指南_休闲
using System.Collections;
Castle ActiveRecord学习实践(1):快速入门指南_休闲
using Castle.ActiveRecord;
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_休闲
namespace ARDemo
Castle ActiveRecord学习实践(1):快速入门指南_休闲_138
{
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_141    
/// <summary>
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
/// User 的摘要说明。
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    
/// </summary>

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [ActiveRecord("Users")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_147    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private int _id;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _name;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _password;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _emailAddress;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private DateTime _lastLogon;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [PrimaryKey(PrimaryKeyType.Identity, 
"LogonID")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public int Id
Castle ActiveRecord学习实践(1):快速入门指南_休闲_162        
{
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_165            
get return _id; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_168            
set { _id = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property(
"LogonName")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string Name
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_175        
{
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_178            
get return _name; }
Castle ActiveRecord学习实践(1):快速入门指南_实践_181            
set { _name = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property(
"Password")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string Password
Castle ActiveRecord学习实践(1):快速入门指南_休闲_188        
{
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_191            
get return _password; }
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_194            
set { _password = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property(
"EmailAddress")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string Address
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_201        
{
Castle ActiveRecord学习实践(1):快速入门指南_实践_204            
get return _emailAddress; }
Castle ActiveRecord学习实践(1):快速入门指南_休闲_207            
set { _emailAddress = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property(
"LastLogon")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public DateTime LastLogon
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_214        
{
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_217            
get return _lastLogon; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_220            
set {_lastLogon = value; }
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public static void DeleteAll()
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_226        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            DeleteAll( 
typeof(User) );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public static IList FindAll()
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_233        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
return (IList) FindAll( typeof(User) );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public static User Find(int id)
Castle ActiveRecord学习实践(1):快速入门指南_休闲_240        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
return (User) FindByPrimaryKey( typeof(User), id );
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}
 
四.构建配置信息
现在我们要告诉ActiveRecord相关的数据库、数据驱动等信息,最简单的就是使用配置文件
Castle ActiveRecord学习实践(1):快速入门指南_休闲<?xml version="1.0" encoding="utf-8" ?>
Castle ActiveRecord学习实践(1):快速入门指南_休闲
<configuration>
Castle ActiveRecord学习实践(1):快速入门指南_休闲    
<configSections>
Castle ActiveRecord学习实践(1):快速入门指南_休闲        
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
Castle ActiveRecord学习实践(1):快速入门指南_休闲    
</configSections>
Castle ActiveRecord学习实践(1):快速入门指南_休闲    
<activerecord>
Castle ActiveRecord学习实践(1):快速入门指南_休闲        
<config>
Castle ActiveRecord学习实践(1):快速入门指南_休闲            
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
Castle ActiveRecord学习实践(1):快速入门指南_休闲            
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
Castle ActiveRecord学习实践(1):快速入门指南_休闲            
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
Castle ActiveRecord学习实践(1):快速入门指南_休闲            
<add key="hibernate.connection.connection_string" value="UID=sa;Password=sa;Initial Catalog=ARDemo;Data Source=." />
Castle ActiveRecord学习实践(1):快速入门指南_休闲        
</config>
Castle ActiveRecord学习实践(1):快速入门指南_休闲    
</activerecord>
Castle ActiveRecord学习实践(1):快速入门指南_休闲
</configuration>

用过NHibernate的朋友一定会对这段配置代码很熟悉,没错,因为ActiveRecord在底层封装了NHibernate,所以这里的配置跟使用NHibernate时的配置一样,同样是指定了数据源驱动,连接字符串等信息。如果使用了配置文件在代码中只要这样去初始化就可以了
Castle ActiveRecord学习实践(1):快速入门指南_休闲IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord"as IConfigurationSource;
Castle ActiveRecord学习实践(1):快速入门指南_休闲ActiveRecordStarter.Initialize( source, 
typeof(User) );

我们也可以不使用配置文件,而使用代码指定的方式,但是由于这种方式相当于硬编码了,不大推荐大家使用这种方式:
Castle ActiveRecord学习实践(1):快速入门指南_休闲InPlaceConfigurationSource source = new InPlaceConfigurationSource();
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_休闲Hashtable properties 
= new Hashtable();
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_休闲properties.Add(
"hibernate.connection.driver_class""NHibernate.Driver.SqlClientDriver");
Castle ActiveRecord学习实践(1):快速入门指南_休闲properties.Add(
"hibernate.dialect""NHibernate.Dialect.MsSql2000Dialect");
Castle ActiveRecord学习实践(1):快速入门指南_休闲properties.Add(
"hibernate.connection.provider""NHibernate.Connection.DriverConnectionProvider");
Castle ActiveRecord学习实践(1):快速入门指南_休闲properties.Add(
"hibernate.connection.connection_string""UID=sa;Password=19811218;Initial Catalog=ARDemo;Data Source=.");
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_休闲source.Add( 
typeof(ActiveRecordBase), properties );
Castle ActiveRecord学习实践(1):快速入门指南_休闲
Castle ActiveRecord学习实践(1):快速入门指南_休闲ActiveRecordStarter.Initialize( source, 
typeof(User) );
 
五.开始CRUD操作
好了,经过了前面的步骤之后,就可以正式开始我们的对象CRUD操作了。
1.增加User对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void AddUser()
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_277
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    User user 
= new User();
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Name 
= "Terrylee";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Password 
= "aaa";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Address 
= "[email]lhj_cauc@163.com[/email]";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.LastLogon 
= DateTime.Now;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Create();
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

是不是非常简单?我们甚至都没有写过Create()方法,它直接从ActiveRecordBase类继承。我们所做的只是创建这样一个User对象,然后调用它的方法就可以了。
2.查询所有的User对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void FildAll()
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_291
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    IList list 
= User.FindAll();
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    Assert.IsNotNull(list);
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
int actual = list.Count;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
int expected = 2;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    Assert.AreEqual(expected,actual);
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

3.查询某一个指定IdUser对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void Fild()
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_305
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
int id = 5;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    User actual 
= User.Find(id);
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    Assert.IsNotNull(actual);
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    Assert.AreEqual(
"Terrylee",actual.Name);
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    Assert.AreEqual(
"aaa",actual.Password);
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

4.修改User对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void UpdateUser()
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_317
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    User user 
= new User();
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Id 
= 5;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Name 
= "Aero";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Password 
= "aaa";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Address 
= "[email]chwkai@163.com[/email]";
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.LastLogon 
= DateTime.Now;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Update();
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

5.删除User对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void DeleteUser()
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_332
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    User user 
= new User();
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Id 
= 7;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    user.Delete();
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

6.删除所有的User对象
Castle ActiveRecord学习实践(1):快速入门指南_休闲[Test]
Castle ActiveRecord学习实践(1):快速入门指南_休闲
public void DeleteAll()
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_342
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    User.DeleteAll();
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

可以看到,整个过程非常的简洁简单,没有一点多余复杂的代码,相信你已经开始体会到了ActiveRecord的魅力了。唯一有一点你会感到不舒服的是已经有了数据库表还需要手工编写实体类代码,这个不用担心,ActiveRecord已经为我们提供了代码生成工具ActiveRecord Generator
六.使用ActiveRecord Generator生成实体类代码
1.执行Castle.ActiveRecord.Generator.exe,位于目录C:\Program Files\Castle\Bin\net-1.1\下面,可以看到如下界面,选择Project Explorer面板
Castle ActiveRecord学习实践(1):快速入门指南_休闲_347 
2.点击“Add DataBase Connection”图标,如下图中红色方框所示,弹出设置连接字符串对话框,我们首先要为数据库起一个别名,这个名字可以跟数据库名不一样,在后面我们会用到
 
Castle ActiveRecord学习实践(1):快速入门指南_实践_348
注意:如果连接数据库为SQL Server2000数据库,必须在弹出的对话框中选中允许保存密码选项,否则点击OK按钮时会报登录失败的错误!这点不知道是不是我机器的设置问题,如果有朋友遇到这样的错误,不妨一试。
 
3.点击OK后,选择ActiveRecord Components面板
 
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_349
 
 
4.拖动ActiveRecord到左边的空白区域,会出现如下界面,选择我们刚才设置的数据库别名
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_350
 
5.此后操作有选择子段,设置类名等,全部完成后界面如下:
 Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_351
6.选择Project菜单下的Generate Code,输入命名空间,文件设置路径,并选择所要生成代码语言
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_352
注意:有一个选项是否覆盖已经存在的文件,可以根据自己的实际情况选择
7.最后生成的完整实体类代码如下
Castle ActiveRecord学习实践(1):快速入门指南_休闲// 
Castle ActiveRecord学习实践(1):快速入门指南_休闲
// Generated by ActiveRecord Generator
Castle ActiveRecord学习实践(1):快速入门指南_休闲
// 
Castle ActiveRecord学习实践(1):快速入门指南_休闲
//
Castle ActiveRecord学习实践(1):快速入门指南_休闲
namespace ARDemo
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_358
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
using Castle.ActiveRecord;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    [ActiveRecord(
"Users")]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14    
public class User : ActiveRecordBase
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_366    
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private int _logonID;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _logonName;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _password;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private string _emailAddress;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
private System.DateTime _lastLogon;
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [PrimaryKey(PrimaryKeyType.Native)]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public int LogonID
Castle ActiveRecord学习实践(1):快速入门指南_实践_382        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
get
Castle ActiveRecord学习实践(1):快速入门指南_实践_386            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
return this._logonID;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
set
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_392            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
this._logonID = value;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property()]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string LogonName
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_401        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
get
Castle ActiveRecord学习实践(1):快速入门指南_实践_405            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
return this._logonName;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
set
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_411            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
this._logonName = value;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property()]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string Password
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_420        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
get
Castle ActiveRecord学习实践(1):快速入门指南_休闲_424            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
return this._password;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
set
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_430            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
this._password = value;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property()]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public string EmailAddress
Castle ActiveRecord学习实践(1):快速入门指南_休闲_439        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
get
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_443            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
return this._emailAddress;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
set
Castle ActiveRecord学习实践(1):快速入门指南_休闲_449            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
this._emailAddress = value;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        [Property()]
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public System.DateTime LastLogon
Castle ActiveRecord学习实践(1):快速入门指南_CastleActiveRecord_458        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
get
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_462            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
return this._lastLogon;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
set
Castle ActiveRecord学习实践(1):快速入门指南_入门指南_468            
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14                
this._lastLogon = value;
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51            }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public static void DeleteAll()
Castle ActiveRecord学习实践(1):快速入门指南_实践_476        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            ActiveRecordBase.DeleteAll(
typeof(User));
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14        
public static User[] FindAll()
Castle ActiveRecord学习实践(1):快速入门指南_实践_483        
{
Castle ActiveRecord学习实践(1):快速入门指南_休闲_14            
return ((User[])(ActiveRecordBase.FindAll(typeof(User))));
Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51        }

Castle ActiveRecord学习实践(1):快速入门指南_Castle开发系列_51    }

Castle ActiveRecord学习实践(1):快速入门指南_入门指南_17}

大家还应该注意的一点是生成One-Many/Many-One等关系的实体类文件时可能会出现一些问题,需要对生成的代码手工改动。最后希望和研究Castle的朋友能够多多交流!