可以先设计类,也可以先设计数据库,利用Castle.ActiveRecord.Generator.exe可以生成实体类,不过有些关系复杂的父子表 生成的代码要手动修改,此bug已经提交了 For complex mappings, HasMany is being generated incorrectly
有了实体类,还需要进行一些简单必要的配置,其实就是配置NHibernate的一些参数
<?xml version="1.0" encoding="utf-8" ?>
<activerecord>
<config>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.dialect" value="NHibernate.JetDriver.JetDialect, NHibernate.JetDriver" />
<add key="hibernate.connection.driver_class" value="NHibernate.JetDriver.JetDriver, NHibernate.JetDriver" />
<add key="hibernate.connection.connection_string" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/xxx.mdb" />
</config>
</activerecord>
存在 config/appconfig.xml 里面
进行castle的初始化,建议放在global.asa里面的
void Application_BeginRequest(object sender, EventArgs e)
{
ActiveRecordStarter.Initialize(
typeof(YourClassName).Assembly,
new XmlConfigurationSource(this.Server.MapPath("~/config/appconfig.xml"))
);
}
此时,你就可以非常方便的利用Castle AR 来进行CRUD操作了。
有一个Message实体类,n个属性,把它所有的取出来绑定到一个GridView上面
IList msgs = Message.FindAll() as IList;
GridViewMsg.DataSource = msgs;
GridViewMsg.DataBind();
取出主键等于某个值的一条记录,其实就是取回一个对象
Message msg = Message.Find(287);
txtCreateDate = msg.CreateDate.ToString(); //一个TextBox控件
就是这样使用,如果要更新它,即改变了它的值
msg.CreateDate = DataTime.Now;
执行
Castle.ActiveRecord.ActiveRecordMediator.Update(msg); //就更新了这条记录
Castle.ActiveRecord.ActiveRecordMediator.Delete(msg); //删除这条记录
对于新增,也很简单,
Message msg = new Message();
msg.Fromwho = "guilei";
msg.Msg = "test1234";
msg.Towho = "jwc";
msg.Grade = "1";
msg.Title = "just a test";
msg.Flag = 0;
msg.Wtime = DateTime.Now.ToString();
try
{
msg.Create(); //这样就是新增一条记录了
}
catch(Exception ex)
{
//log.Error("Error while setting up the database schema, ignoring the fixture", ex);
}
对于有关系的比如父子表之类的,在实体类里面都描述好了,级联更新删除Castle都能自动的帮你完成