且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧

更新时间:2022-09-21 09:50:57


摘要:本文将会介绍使用ActiveRecord中的一些技巧。

 
主要内容
1.由实体类生成数据表
2.运行存在的SQL脚本
3.使用空属类型
4.使用枚举类型的属性
5.使用NHibernate中的日志记录
 
一.由实体类生成数据表
在前面所用到的例子中我们都是先有数据表结构,然后才有实体类,然而这会让很多朋友认为ORM怎么变成了ROM了,其实这只是我们平时的一个开发时的习惯问题,ActiveRecord是支持先有实体类,再由实体类生成数据库表。只不过我们可以在开发中根据项目的实际情况在这两种之间选择。看下面的代码,要生成数据库表结构,在实体类中需要多提供一些信息,是否为空,字段长度等。
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧[ActiveRecord("Blogs")]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
public class Blog : ActiveRecordBase
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
private int _id;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
private String _name;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
private String _author;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    [PrimaryKey(PrimaryKeyType.Native, 
"blog_id")]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
public int Id
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
get return _id; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
set { _id = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    }

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    [Property(
"blog_name", NotNull=true, Length=25)]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
public String Name
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
get return _name; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
set { _name = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    }

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    [Property(
"blog_author", NotNull=true, Length=50)]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
public String Author
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
get return _author; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
set { _author = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    }

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

要生成数据库表需要调用ActiveRecordStarter.CreateSchema()方法就可以了。
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧public void Initli()
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    XmlConfigurationSource source 
= new XmlConfigurationSource("MyConfig.xml");
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    ActiveRecordStarter.Initialize( source, 
typeof(Blog),typeof(Post),typeof(Custom));
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    ActiveRecordStarter.CreateSchema();
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

这里需要注意两点:
 
1.生成数据库表时只有当该表不存在时ActiveRecord才会生成,否则表如果存在ActiveRecord不会做任何事情,也不会报任何错误。
2.如果在实体类中没有指定字段的长度和是否为空,则默认生成的字段是允许为空的,且字符类生成后的字段类型为Nvarchar,长度为255
 
二.运行存在的SQL脚本
有时候我们会想在ActiveRecord框架启动时运行一个已经存在的SQL脚本来生成数据库表结构,ActiveRecord同样也提供了这样的功能,通过调用ActiveRecordStarter.CreateSchemaFromFile()来实现。示例代码如下:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧public void Initli()
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    XmlConfigurationSource source 
= new XmlConfigurationSource("MyConfig.xml");
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    ActiveRecordStarter.Initialize( source, 
typeof(Blog));
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    ActiveRecordStarter.CreateSchemaFromFile(
"MySqlScript.sql");
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}
 
三.使用空属类型
在进行数据库操作时,有时候需要进行空值的处理,在ActiveRecord中给我们提供了一组空属类型,可以方便的进行处理,比如可以这样写属性:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧[Property]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
public NullableDateTime CreatedDate
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
get return _createdDate; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
set { _createdDate = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧[Property]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
public NullableInt32 Count
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
get return _count; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
set { _count = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

看一下ActiveRecord提供的空属类型与实际类型对照表
CLR Basic Type
Nullable Type
System.Boolean
Nullables.NullableBoolean
System.Byte
Nullables.NullableByte
System.Char
Nullables.NullableChar
System.DateTime
Nullables.NullableDateTime
System.Decimal
Nullables.NullableDecimal
System.Double
Nullables.NullableDouble
System.Guid
Nullables.NullableGuid
System.Int16
Nullables.NullableInt16
System.Int32
Nullables.NullableInt32
System.Int64
Nullables.NullableInt64
System.SByte
Nullables.NullableSByte
System.Single
Nullables.NullableSingle
注意在使用空属类型时需要添加以下引用
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧Nullables.dll
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧Nullables.NHibernate.dll
 
四.使用枚举类型属性
ActiveRecord中我们可以定义一个属性的类型为枚举类型,示例代码:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧public class Post : ActiveRecordBase
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
//Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
private StatusType _status_type_id;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
public enum StatusType
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        Editing 
= 0,
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        Published 
= 1,
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        Archived 
= 2
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    }

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    [Property(
"status_id")]
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
public StatusType Status
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
get return _status_type_id; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
set { _status_type_id = value; }
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    }

Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

在使用该实体类的StatusType属性时,可以这样赋值:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧Post.Status = Post.StatusType.Archived;
 
五.使用NHibernate的日志记录
用过NHibernate的朋友都知道,NHibernate是用Log4net来记录日志的,在ActiveRecord中也可以通过简单的配置来使用Log4net记录。配置示例:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧<?xml version="1.0" encoding="utf-8" ?>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
<configuration>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
<configSections>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
</configSections>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
<activerecord>     
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
</activerecord>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
<log4net>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<!-- Define some output appenders -->
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<appener name="trace" type="log4net.Appender.TraceAppender, log4net">Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<layout type="log4net.Layout.PatternLayout,log4net">
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧                
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%P{user}&gt; - %m%n" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
</layout>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
</appener>Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<appener name="console" type="log4net.Appender.ConsoleAppender, log4net">Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<layout type="log4net.Layout.PatternLayout,log4net">
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧                
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%P{user}&gt; - %m%n" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
</layout>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
</appener>Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<appener name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<param name="File" value="log.txt" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<param name="AppendToFile" value="true" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<param name="RollingStyle" value="Date" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<param name="DatePattern" value="yyyy.MM.dd" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<param name="StaticLogFileName" value="true" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<layout type="log4net.Layout.PatternLayout,log4net">
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧                
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
</layout>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
</appener>Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<root>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<!-- priority value can be set to ALL|INFO|WARN|ERROR -->
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<priority value="ALL" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧            
<appener-ref ref="rollingFile" />Õ
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
</root>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
</log4net>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
<nhibernate>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<!-- with this set to true, SQL statements will output to the console window if it's a console app -->
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧        
<add key="hibernate.show_sql" value="true" />
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
</nhibernate>
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
</configuration>

初始化配置在调用ActiveRecordStarter.Initialize()方法之前
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧public void Initli()
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    XmlConfigurationSource source 
= new XmlConfigurationSource("MyConfig.xml");
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    log4net.Config.XmlConfigurator.Configure();
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    ActiveRecordStarter.Initialize( source, 
typeof(Blog));
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}

六.Hooks
 
有时候我们会在保存,加载,删除等操作时做一些必需的处理,这时可以通过重载以下三个方法来实现:
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧BeforeSave(IDictionary state) 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧BeforeLoad(IDictionary state) 
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧BeforeDelete(IDictionary state)

比如说我们想在保存的时候设置Post的创建时间为当前时间,可以这样去写
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧protected override bool BeforeSave(IDictionary state)
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
{
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    state[
"Created"= DateTime.Now;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧    
return true;
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧
Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧}
 
本文就到这里了,同时本篇也是Castle ActiveRecord学习实践系列的最后一篇,过几天我会提供一个完整的ActiveRecord的例子程序。下面有时间我会继续写Castle中的其他部分,包括IOCFacilityAspect#DynamicProxy等。























本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67667 ,如需转载请自行联系原作者