您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: