随笔 - 292  文章 - 38  评论 - 3616  阅读 - 190万

Castle学习笔记----认识Castle.AvtiveRecord

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。
ActiveRecord提供的简洁的O/R映射
    ActiveRecordCastle中提供的一个数据访问框架,它在底层封装了NHibernate的操作,使用特性来代替映射文件,它提供的简洁的O/R映射会让你惊叹原来实现持久化数据层是那么简单。
一.首先建立实体类并完对数据库的映射

namespace ZDS.Test.Model
{
    [ActiveRecord("Users")]
    public class Users : ActiveRecordBase<Users> //继承于Castle的ActiveRecordBase
    {
        private int oid;
        [PrimaryKey(PrimaryKeyType.Identity,"Oid")]
        public int Oid
        {
            get { return oid; }
            set { oid = value; }
        }

        private string name;
        [Property("Name",Length=100,NotNull=true)]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private string sex;
        [Property("Sex")]
        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }

        private string age;
        [Property("Age")]
        public string Age
        {
            get { return age; }
            set { age = value; }
        }
    }
}
大家可能注意到了,每一个属性上面都加上了特性[Property()].
如果属性名和字段名一致,[Property()]中可以为空,也可以写上字段的名字.
这里用[PrimaryKey]特性指定Id作为主键,并且说明了主键的类型为自增型的,用PrimaryKeyType.Identity来说明.

下一步我们为实体类根据需要加上静态的操作方法,至于Create(),Update(),Delete(),Find(),FindAll()等方法则会直接从ActiveRecordBase基类中继承,示例代码如下:
二.建立实现层类,直接继承于ActiveRecordBase的方法

namespace ZDS.Test.Component
{
    public class UserComponent:ActiveRecordBase<Users>  //注意这里要继承于ActiveRecordBase
    {
        public static void Create(Users user)
        {
            user.Create();
        }

        public static IList<Users>  QueryAll()
        {
            return (IList<Users>)FindAll(typeof(Users));
        }

        public static Users QueryByOid(int Oid)
        {
            //return (Users)FindByPrimaryKey(typeof(Users),Oid);
            return (Users)Find(Oid);//这里的这两种方法都是可以的
        }
    }
}
三.建立测试程序来调用这些方法

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridViewDataBind();
        }
    }

    /// <summary>
    /// 添加用户
    /// </summary>
    protected void Button2_Click(object sender, EventArgs e)
    {
        Users user = new Users();
        user.Name = this.TextBox1.Text.Trim();
        user.Sex = this.TextBox2.Text.Trim();
        user.Age = this.TextBox3.Text.Trim();
        UserComponent.Create(user);
        GridViewDataBind();
    }

    /// <summary>
    /// 查询全部
    /// </summary>
    public void GridViewDataBind()
    {
        this.GridView1.DataSource = UserComponent.QueryAll();
        this.GridView1.DataBind();
    }

    /// <summary>
    /// 查询但条数据
    /// </summary>
    protected void Button3_Click(object sender, EventArgs e)
    {
         Users user = UserComponent.QueryByOid(int.Parse(this.TextBox4.Text.Trim()));
         this.Label1.Text = string.Format("编号为:{0},姓名:{1},性别:{2},年龄:{3}",
                             user.Oid,
                             user.Name,
                             user.Sex,
                             user.Age);
    }

}
本次笔记就先记录于此,要想程序能够正常运行还得配置一些文件,具体配置请看我写的Castle学习笔记----Castle.ActiveRecord配置
http://www.cnblogs.com/beniao/archive/2007/11/18/963392.html

posted on   Bēniaǒ  阅读(1068)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

点击右上角即可分享
微信分享提示