Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
2006-04-10 08:17
447 查看
摘要:多对多的关系在日常开发中也会经常遇到,在ActiveRecord中我们用HasAndBelongsToMany特性来实现Many-Many的关联,本文将通过一个具体的实例来介绍这一用法。
主要内容[/b][/b]
1.准备数据库表
2.编写实体类
3.编写测试代码
一.准备数据库表[/b][/b]
接着在上篇文章中的例子,为了实现多对多的关系,我们引入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 (
blog_Id int NOT NULL ,
community_Id int NOT NULL
)
CREATE TABLE Communities (
community_Id int IDENTITY (1, 1) PRIMARY KEY,
community_Name varchar (50) ,
community_Intro varchar (500)
)
二.编写实体类代码[/b][/b]
为了实现多对多的关系,我们要在Blog、Community类中分别使用HasAndBelongsToMany特性,不需要编写Blog_Community类。示例代码:
//
[HasAndBelongsToMany( typeof(Community),
Table="Blog_Community",
ColumnRef=" community_id ",
ColumnKey=" blog_id " )]
public IList Communitys
//
[HasAndBelongsToMany( typeof(Blog),
Table="Blog_Community",
ColumnRef="blog_id",
ColumnKey="community_id" )]
public IList Blogs
[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
[ActiveRecord("Communities")]
public class Community : ActiveRecordBase
[Test]
public void TestCascadingSave()
[Test]
public void TestCascadingUpdate()
[Test]
public void TestCascadingDelete()
{
//测试1:删除Blog
Blog blog = Blog.Find(10);
using(TransactionScope btran = new TransactionScope())
{
try
{
blog.Delete();
btran.VoteCommit();
}
catch
{
btran.VoteRollBack();
}
}
//测试2:删除Community
Community community = Community.Find(3);
using(TransactionScope ctran = new TransactionScope())
{
try
{
community.Delete();
ctran.VoteCommit();
}
catch
{
ctran.VoteRollBack();
}
}
}
好了,关于Many-Many关联映射就写这么多了,内容比较简单。下篇文章我会介绍在ActiveRecord中实现延迟加载和使用Where子句。
参考资料[/b]
Castle的官方网站http://www.castleproject.org
主要内容[/b][/b]
1.准备数据库表
2.编写实体类
3.编写测试代码
一.准备数据库表[/b][/b]
接着在上篇文章中的例子,为了实现多对多的关系,我们引入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 (
blog_Id int NOT NULL ,
community_Id int NOT NULL
)
CREATE TABLE Communities (
community_Id int IDENTITY (1, 1) PRIMARY KEY,
community_Name varchar (50) ,
community_Intro varchar (500)
)
二.编写实体类代码[/b][/b]
为了实现多对多的关系,我们要在Blog、Community类中分别使用HasAndBelongsToMany特性,不需要编写Blog_Community类。示例代码:
//
[HasAndBelongsToMany( typeof(Community),
Table="Blog_Community",
ColumnRef=" community_id ",
ColumnKey=" blog_id " )]
public IList Communitys
//
[HasAndBelongsToMany( typeof(Blog),
Table="Blog_Community",
ColumnRef="blog_id",
ColumnKey="community_id" )]
public IList Blogs
[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
[ActiveRecord("Communities")]
public class Community : ActiveRecordBase
[Test]
public void TestCascadingSave()
[Test]
public void TestCascadingUpdate()
[Test]
public void TestCascadingDelete()
{
//测试1:删除Blog
Blog blog = Blog.Find(10);
using(TransactionScope btran = new TransactionScope())
{
try
{
blog.Delete();
btran.VoteCommit();
}
catch
{
btran.VoteRollBack();
}
}
//测试2:删除Community
Community community = Community.Find(3);
using(TransactionScope ctran = new TransactionScope())
{
try
{
community.Delete();
ctran.VoteCommit();
}
catch
{
ctran.VoteRollBack();
}
}
}
好了,关于Many-Many关联映射就写这么多了,内容比较简单。下篇文章我会介绍在ActiveRecord中实现延迟加载和使用Where子句。
参考资料[/b]
Castle的官方网站http://www.castleproject.org
相关文章推荐
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
- C#.Net Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- C#.Net Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
- Castle ActiveRecord学习实践(4)关系映射
- Castle ActiveRecord学习实践(3):映射基础
- Castle ActiveRecord学习实践(2)映射
- Castle ActiveRecord学习实践(3):映射基础
- Castle ActiveRecord学习实践(1):映射基础
- Castle ActiveRecord学习实践(2):构建配置信息
- Hibernate实现many-to-many的映射关系
- Castle ActiveRecord学习实践(2):构建配置信息
- [导入]Castle ActiveRecord学习记录 - 处理继承关系(续)
- (转)Django ====> 实战学习篇十二 提交订单;自定义many-to-many关系,实现Atom订阅
- Castle ActiveRecord学习实践(1):快速入门指南
- Castle ActiveRecord学习实践(2):构建配置信息