Welcome

首页 / 软件开发 / C# / C#基础系列:实现自己的ORM(构造我自己的ORM)

C#基础系列:实现自己的ORM(构造我自己的ORM)2011-05-29 csdn博客 老田构造我自己的ORM

通过前面两章的描述,我相信很多朋友都已经明白 我了下面将要讨论到的ORM的实现方法了,那就是根据自定义Attribute来定义 O/R Mapping规则,然后通过反射来动态获取此规则,动态构造SQL语句。

由于这个小东西(ORM)出生在深圳,所以我想来想去,她应该有个深圳 的名字,所以我就叫她“MiniORM”。不知道各位认为如何?

MiniORM采用的是ONE_INHERIT_TREE_ONE_CLASS(一个继承树对应于一个 表)的结构,虽然这种结构容易导致数据冗余,但是这种结构很简单。另,本 MiniORM 仅仅考虑一个表一个PK,一个FK的情况。

MiniORM结构如下,为 了更便于理解和使用,我使用了3个类:

1、OrmWriter:负责将实体对象 (比如前面章节说的Person)插入数据库和修改数据库中对应的记录。

2 、OrmRemover:负责根据实体对象,删除指定的记录;

3、OrmReader: 负责根据实体对象,读取指定的记录;

上面就是MiniORM的3个主要类。下面我们就详细地根据前面的描述一 步步构造她。我们这里还是以前面说的Person为例进行说明。

通过本系 列第一章,我们知道,对象不但存在继承关系,特别在实际的应用中还存在包含 关系,比如一个Person包含两个Hand(手)类,包含一个Head(头)类等,我们 的Person在数据库中应该有一个ID,为了更加方便使用和讨论,此ID在MiniORM 中是一个int以及自动增长类型(ID INDENTITY(1,1))。这些都是我们的 MiniORM应该考虑的范围。

我们对我们的Person做修改:

[DataObjectAttribute("Person")]
public class Person
{
private int _ID;
private string _Name;
private int _Age;
private string _Sex;
private Head _Head;
private Hand _LeftHand;
private Hand _RightHand;
public int ID
{
get { return _ID; }
set { _ID = value; }
}
public Head Head
{
get { return _Head; }
set { _Head = value; }
}
public Hand LeftHand
{
get { return _LeftHand; }
set { _LeftHand = value; }
}
public Hand RightHand
{
get { return _RightHand; }
set { _RightHand = value; }
}
[DataFieldAttribute("name", "NvarChar")]
public string Name
{
get { return this._Name; }
set { this._Name = value; }
}
[DataFieldAttribute("age", "int")]
public int Age
{
get { return this._Age; }
set { this._Age = value; }
}
[DataFieldAttribute ("sex", "NvarChar")]
public string Sex
{
get { return this._Sex; }
set { this._Sex = value; }
}
}