C#基礎系列:實現自己的ORM(構造我自己的ORM)

來源:互聯網
上載者:User

構造我自己的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; }
  }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.