六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 28|回复: 0

C#基础系列:实现自己的ORM(构造我自己的ORM)

[复制链接]

升级  32.45%

533

主题

533

主题

533

主题

探花

Rank: 6Rank: 6

积分
1649
 楼主| 发表于 2013-1-26 12:40:00 | 显示全部楼层 |阅读模式
构造我自己的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做修改:

<div class="highlighter">

  • [DataObjectAttribute("Person")]
  • 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;}
  • }

  • [DataFieldAttribute("name","NvarChar")]
  • publicstringName
  • {
  • get{returnthis._Name;}
  • set{this._Name=value;}
  • }

  • [DataFieldAttribute("age","int")]
  • publicintAge
  • {
  • get{returnthis._Age;}
  • set{this._Age=value;}
  • }

  • [DataFieldAttribute("sex","NvarChar")]
  • publicstringSex
  • {
  • get{returnthis._Sex;}
  • set{this._Sex=value;}
  • }
  • }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表