轻量级ORM开发系列:对象关系以及级联操作的探讨

     ORM全称Object/Relation Mapping 即对象关系映射,既然开发ORM,那就无可避免的要涉及到对象之间的关系。

通过面向对象思想的抽象, 可以将对象间的关系定义为一下几种:

  • 一对一
  • 多对一(一对多)
  • 多对多

 我们可以很简单的对对象关系建立一个枚举.

 public enum Relation
    {
        None
=1,
        OneToMany,
        ManyToOne,
        OneToOne,
        ManyToMany
    }

   这个Relation的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备

  下面我们来看一下级联操作

   主流的数据库都支持Cascade操作,下面我们给一个 Cascade操作的小例子——级联删除

create table a
(
 id  varchar(
20) primary key,
 password varchar(
20) not null
)

create table b
(
 id 
int identity(1,1)  primary key,
 name varchar(
50) not null,
 userId varchar(
20),
 foreign key (userId) references a(id) on delete cascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insert a values (
'11','aaa')
insert a values(
'23','aaa')
insert b values(
'da','11')
insert b values(
'das','11')
insert b values(
'ww','23')
删除A表内id为‘
11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除
delete a 
where id='11' 

数据库一般支持的级联有ON UPDATE CASCADE和ON DELETE CASCADE

如果我们可以很好的运用这些关系的话,我们就可以实现像nhibernate一样的级联删除。

下面我们 一个级联枚举

 public enum Cascade
    {
        All,
        SaveOrUpdate,
        Delete,
        None
    }

 这个Cascade的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备

好了,今天的讨论就到这里了,十点半了。各位晚安!

 

posted @ 2010-11-26 21:19  大熊先生|互联网后端技术  阅读(866)  评论(0编辑  收藏  举报