castle (for .net2.0 )在项目开发中真的太好了,可以减少好多的工作量,内层由于封装了NHibernate,因此配置文件的书写还有内置的一些操作方法都比Nhibernate强很多。不需要写hbm后缀的配置文件了。
内置的很多方法都可以重载,用起来很简单的,如果想详细的从头学习,推荐你看看Terrylee的博客(里面的好东西太多了)。
下面就是我的代码
web.config
<configSections>
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>
</configSections>
<connectionStrings>
<add name="Castle" connectionString="Data Source=.;Initial Catalog=northwind;Integrated Security=True"/>
</connectionStrings>
<activerecord isWeb="true">
<!--在asp.net中运行所以要设置为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 = ${Castle}"/>
</config>
</activerecord>
global.asax文件(<%@ Import Namespace="customers" %>//引入你的命名空间)
Application_Start事件:
Castle.ActiveRecord.Framework.IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as Castle.ActiveRecord.Framework.IConfigurationSource;
Castle.ActiveRecord.ActiveRecordStarter.Initialize(System.Reflection.Assembly.Load("customers"), source);//加载assembly,需要修改成自己的程序集
类库文件的书写:
由于本部分关心的是castle中HQL语句的一部分使用,只要是in,所以其他内容不贴出来了
public static IList FindAll(params NHibernate.Expression.ICriterion[] cri)
{
return (IList)FindAll(typeof(Customers), cri);
}
至此,web页面就可以使用castle来操作数据库了
In的用法:
GridView1.DataSource = customers.Customers.FindAll(Expression.In("CustomerID", TextBox1.Text.Split(',')));
GridView1.DataBind();
Expression.In的第二个参数可以是一个Object数组,也可以是ICollection数据
上面代码中TextBox1.Text.Split(',')可以直接写成new string[]{'AA','BB'}
顺便介绍一下常用的其他的谓词的用法:
//精确查询
this.GridView1.DataSource = Users.FindAll(Expression.Eq("EmailAddress", TextBox1.Text));
//模糊查询,有一个匹配模式MatchMode
//this.GridView1.DataSource = Users.FindAll(Expression.Like("EmailAddress", TextBox1.Text,MatchMode.Anywhere));
this.GridView1.DataBind();
本文基于vs2005+castle(for 2.0)环境
一边学习一边看Terrylee的博客一边练习,在此特向Terrylee老兄表示感谢!!!