Welcome

首页 / 软件开发 / .NET编程技术 / Castle ActiveRecord学习实践(4) 实现One-Many关系的映射

Castle ActiveRecord学习实践(4) 实现One-Many关系的映射2011-02-03 cnblogs terrylee主要内容

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指明哪些操作会从父对象级联到关联的对象,相关的操作见后面,如果不指定,则为NoneCascade=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