Castle ActiveRecord学习实践(4) 实现One-Many关系的映射

主要内容

1.准备数据表结构

2.编写实体类并介绍HasMany和BlongsTo特性

3.构建配置信息

4.编写测试代码

一.准备数据表结构

在这个例子中,我们引入了两个对象Blog、Post,它们之间的关系是一对多,即一个Blog有多篇Post。需要用到的数据表结构如下

CREATE TABLE Blogs (
  blog_id   int IDENTITY(1, 1) PRIMARY KEY,
  blog_name  varchar(50),
  blog_author varchar(50)
)

CREATE TABLE Posts (
  post_id    int IDENTITY(1, 1) PRIMARY KEY,
  post_title   varchar(50),
  post_contents text,
  post_categories varchar(50),
  post_blogid  int FOREIGN KEY REFERENCES Blogs (blog_id),
  post_created  datetime,
  post_published bit
)

二.编写实体类

首先我们来看Blog实体类的编写,需要用到HasMany特性,这时我们会在Blog实体类中定义一个Posts属性,用它来表示该Blog所发表的所有Posts,代码如下

[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
{
  //……
  private IList _posts;

  [HasMany(typeof(Post), Table="posts", ColumnKey="post_blogid")]
  public IList Posts
  {
    get { return _posts; }
    set { _posts = value; }
  }
}

HasManyAttribute说明

属性 说明 示例
Cascade 指明哪些操作会从父对象级联到关联的对象,相关的操作见后面,如果不指定,则为None Cascade=ManyRelationCascadeEnum.All
Inverse 指定是否级联操作 Inverse =true|false
Schema 指定Schema的名字 Schema="ARDemo"
Table 指定持久化类所关联的数据库表名,如果表名与类名相同,可以省略 Table="posts"
ColumnKey 指定关联类的一个属性,这个属性将会和本外键相对应。 ColumnKey="post_blogid"
Where 指定一个附加SQL的Where子句 Where="IsPost = 0"
Lazy 指定是否延迟加载关联对象 Lazy=true|false
时间: 2025-01-19 17:48:02

Castle ActiveRecord学习实践(4) 实现One-Many关系的映射的相关文章

Castle ActiveRecord学习实践(10) 深度分析Schema Pitfals

摘要:写这篇文章缘于昨天跟Linkin的一段聊天.我在使用ActiveRecord的一些技巧一文中的由实体类生成数据库表提到了这样一句话:生成数据库表时只有当该表不存在时ActiveRecord才会生成,否则表如果存在ActiveRecord不会做任何事情,也不会报任何错误.Linkin说他在实验时如果数据库表存在,ActiveRecord会删除表中的记录,其实这句话是在有些情况下是不对的,本篇文章将详细介绍Castle ActiveRecord中的Schema Pitfals. 主要内容 1.

Castle ActiveRecord学习实践(1) 快速入门指南

摘要:最近几天有时间看了一下Castle,原来它的功能是如此的强大,从数据访问框架到IOC容器,再到WEB框架,基本包括了整个开发过程中的所有东西,看来得好好学习研究一下了,并且打算把自己学习过程的一些东西记录下来.先从ActiveRecord开始吧,ActiveRecord提供的简洁的O/R映射给我留下了很深的印象,本文将通过一个简单对象的CRUD操作来带你快速走进Castle ActiveRecord. 主要内容 1.概述 2.准备相关的数据表 3.编写User实体类 4.构建配置信息 5.

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

主要内容 1.由实体类生成数据表 2.运行存在的SQL脚本 3.使用空属类型 4.使用枚举类型的属性 5.使用NHibernate中的日志记录 一.由实体类生成数据表 在前面所用到的例子中我们都是先有数据表结构,然后才有实体类,然而这会让很多朋友认为ORM怎么变成了ROM了,其实这只是我们平时的一个开发时的习惯问题,ActiveRecord是支持先有实体类,再由实体类生成数据库表.只不过我们可以在开发中根据项目的实际情况在这两种之间选择.看下面的代码,要生成数据库表结构,在实体类中需要多提供一些

Castle ActiveRecord学习实践(8) 数据有效性的验证

主要内容 1.概述 2.使用Validation 3.如何扩展 4.深入分析验证 一.概述 在录入数据时,对数据有效性的验证是必不可少的,很多时候我们在UI层上就会做一层验证,但有时也需要在底层做一些必要的处理,这就要用到ActiveRecord中的数据有效性的验证.ActiveRecord为我们提供了如下几个验证: n ValidateEmail n ValidateIsUnique n ValidateRegExp n ValidateNotEmpty n ValidateConfirmat

Castle ActiveRecord学习实践(3) 映射基础

主要内容 简单映射 1.ActiveRecordAttribute 2. PrimaryKeyAttribute 3.CompositeKeyAttribute 4.PropertyAttribute 5.FieldAttribute 一.ActiveRecordAttribute 每一个实体类都必须继承于基类ActiveRecordBase,并在实体类上设置特性ActiveRecordAttribute,示例代码 //指定数据库表名 [ActiveRecord("Blogs")] p

Castle ActiveRecord学习实践(2) 构建配置信息

主要内容 1.需要配置什么 2.如何去配置 3.常见的配置示例 一.需要配置什么 在第一篇大家都已经看到了,其实我们的配置信息跟用NHibernate时的配置是一样的,这是因为ActiveRecord在底层封装了NHibernate.为了没有用过NHibernate的朋友,这里再把配置信息简单介绍一下. 1.配置NHibernate ADO.NET属性 属性名 说明 hibernate.connection.provider_class 定制IConnectionProvider的类型. 例如:

Castle ActiveRecord学习实践(7) 使用HQL查询

主要内容 1.HQL概述 2.SimpleQuery查询 3.ScalarQuery查询 4.自定义查询 5.使用CallBack 一.HQL简单介绍 HQL全名是Hibernate Query Language,它是一种完全面向对象的查询语言.先来看一下HQL最基本的一些用法 1.From子句 from Post 你也可以为Post起一个别名 from Post as post 或者省略as from Post post 2.Select 子句 select Name,Author from

Castle ActiveRecord学习实践(5) 实现Many–Many关系的映射

主要内容 1.准备数据库表 2.编写实体类 3.编写测试代码 一.准备数据库表 接着在上篇文章中的例子,为了实现多对多的关系,我们引入Community,即每个Blog可以属于多个社区,每个社区也可以有多个Blog. CREATE TABLE Blogs ( blog_id int IDENTITY(1, 1) PRIMARY KEY, blog_name varchar(50), blog_author varchar(50) ) CREATE TABLE Blog_Community ( b

Castle.ActiveRecord的初始化配置补充及配置封装的解决方案

前些天我发了一篇关于AR的配置的文章,是我帮一位刚学习AR的朋友做了一个小实例后写上来的,里面我采用了IConfigurationSource,ActiveRecord是在web.config里配置的,其实ActiveRecord可以单独写在别的地方或动态配置也是可以的,比如用XML来配置,用Hashtable来配置.下面我简单介绍了怎么配置. 一.用XML配置,通过XmlConfigurationSource来获取配置信息,AppConfig.xml,详细配置请看下面xml数据 1<?xml