C#基础系列:实现自己的ORM(构造我自己的ORM)
构造我自己的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:负责根据实体对象,读取指定的记录;
http://p.blog.csdn.net/images/p_blog_csdn_net/RonoTian/EntryImages/20080908/%E7%B1%BB.jpg
上面就是MiniORM的3个主要类。下面我们就详细地根据前面的描述一步步构造她。我们这里还是以前面说的Person为例进行说明。
通过本系列第一章,我们知道,对象不但存在继承关系,特别在实际的应用中还存在包含关系,比如一个Person包含两个Hand(手)类,包含一个Head(头)类等,我们的Person在数据库中应该有一个ID,为了更加方便使用和讨论,此ID在MiniORM中是一个int以及自动增长类型(ID INDENTITY(1,1))。这些都是我们的MiniORM应该考虑的范围。
我们对我们的Person做修改:
<div class="highlighter">
[*]
[*]publicclassPerson
[*]{
[*]privateint_ID;
[*]privatestring_Name;
[*]privateint_Age;
[*]privatestring_Sex;
[*]privateHead_Head;
[*]privateHand_LeftHand;
[*]privateHand_RightHand;
[*]
[*]publicintID
[*]{
[*]get{return_ID;}
[*]set{_ID=value;}
[*]}
[*]
[*]publicHeadHead
[*]{
[*]get{return_Head;}
[*]set{_Head=value;}
[*]}
[*]
[*]publicHandLeftHand
[*]{
[*]get{return_LeftHand;}
[*]set{_LeftHand=value;}
[*]}
[*]
[*]publicHandRightHand
[*]{
[*]get{return_RightHand;}
[*]set{_RightHand=value;}
[*]}
[*]
[*]
[*]publicstringName
[*]{
[*]get{returnthis._Name;}
[*]set{this._Name=value;}
[*]}
[*]
[*]
[*]publicintAge
[*]{
[*]get{returnthis._Age;}
[*]set{this._Age=value;}
[*]}
[*]
[*]
[*]publicstringSex
[*]{
[*]get{returnthis._Sex;}
[*]set{this._Sex=value;}
[*]}
[*]}
页:
[1]