日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小巧优美的ORM框架-doodads

發(fā)布時間:2025/3/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小巧优美的ORM框架-doodads 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于.net下的ORM框架,大家最為耳熟的可能就是NHibernate了,當(dāng)然,很多公司正在使用自己開發(fā)的ORM框架,筆者至少見過3家不同公司的ORM框架,其實(shí)都是大同小異,借助于codesmith、mygeneration等代碼生成工具,自己開發(fā)一個ORM框架也不是什么難事,關(guān)鍵的問題是,你能不能設(shè)計(jì)出代碼優(yōu)美簡潔、功能靈活、定制方便以及部署容易的ORM框架。

  我去年開始熱衷NHibernate(與其說熱衷,不如說是迷信,因?yàn)楹髞碓絹碓蕉嗟淖C據(jù)證明,公司自己的那套用了幾年的使用Excel生成實(shí)體類的ORM小框架更加適合快速開發(fā),并且靈活易定制),因?yàn)楫?dāng)時很多人討論NH,有的公司招聘的時候也說會NH優(yōu)先,當(dāng)時花了幾個小時才配置成功,又是搞codesmith的破解版,又是生成xml model,并且對其繁雜的關(guān)系機(jī)制感到恐懼,比如外鍵的配置,視圖的配置,而我更習(xí)慣在數(shù)據(jù)庫中把關(guān)系弄好,建立表、視圖、約束、索引和存儲過程,而不想把這些事情交給NHibernate來做,但是它卻功能太強(qiáng)大,什么都愿意為你做,什么都能做。另外我感覺它封裝的很深,我有時候不知道他從數(shù)據(jù)庫加載了多少條記錄,存儲在哪里,如果再討論它的緩存機(jī)制,更加令人頭疼?

  為什么沒有一種部署容易、代碼優(yōu)美、功能不強(qiáng)但是可以靈活定制、封裝的恰到好處、輕量級的ORM呢?這個問題一直殘繞在我心中,直到我使用了my generation(以下簡稱為mg,為什么我會嘗試使用mg呢,是因?yàn)樗_源而且免費(fèi),而且更容易上手)自帶的doodads,當(dāng)時覺得這個名字很奇怪晦澀,因此想當(dāng)然地認(rèn)為這套框架肯定和它的名字一樣令人費(fèi)解,不過抱著試試看的態(tài)度我深入了解了doodads,發(fā)現(xiàn)它的代碼真的是很簡單,很優(yōu)美,貌似功能也不錯,且看如下的代碼:

// 獲取并修改某條記錄
Employees emps = new Employees();
if(emps.LoadByPrimaryKey(42))
{
    emps.LastName = "Just Got Married";
    emps.Save();
}

// 插入新紀(jì)錄
Employees emps = new Employees();
emps.AddNew();
emps.FirstName = "Mr.";
emps.LastName = "dOOdad";
emps.Sav

e();

dads的新特點(diǎn),所有的CRUD操作都是通過存儲過程實(shí)現(xiàn)的,如果您喜歡在數(shù)據(jù)庫中做更多的事情,這是一個讓您喜歡doodads的理由

  生成CRUD存儲過程,現(xiàn)在打開mg中的如下模板: 

  運(yùn)行后會為您選中的所有表分別生成CRUD(create、read、update、delete)存儲過程,包括:

  '  1) proc[表名]LoadByPrimaryKey  (如果至少有一個主鍵)

  '  2) proc[表名]LoadAll(加載符合條件的所有記錄)

  '  3) proc[表名]Update

  '  4) proc[表名]Insert

  '  5) proc[表名]Delete

  注意:現(xiàn)在生成的是sql文件,而不再是cs代碼,請把生成的sql文件在數(shù)據(jù)庫中執(zhí)行生成相應(yīng)的procedure

  現(xiàn)在再運(yùn)行本項(xiàng)目,不會再提示找不到存儲過程了吧!

  總結(jié):個人認(rèn)為doodads的特點(diǎn)有以下幾點(diǎn):

  基于存儲過程,性能更卓越,靈活性更強(qiáng)

  部署非常簡單,引用dll生成dal類即可,不像nhibernate那么多配置;簡單的基于doodads的項(xiàng)目僅僅需要幾個business entity即可

  封裝的比較淺,您可以很清晰地得知doodads在干什么

  提供的接口優(yōu)美簡潔

?

  // 插入新紀(jì)錄后獲得新紀(jì)錄的主鍵

  int i = emps.EmployeeID;

  這是多么簡潔易讀的、令人親切的代碼!

  接下來我將重點(diǎn)介紹doodads的基礎(chǔ)知識,按照官方的說法,doodads支持如下的數(shù)據(jù)庫系統(tǒng):Microsoft SQL, Oracle, Firebird, Access, PostgreSQL, VistaDB, SQLite, and MySQL ,我在oracle 10g以及sql server 2000上有過成功的應(yīng)用,但是在sql 2005下使用mg生成出來的代碼編譯通不過,不過你可以手動修改,添加合適的ado.net類型即可(按照編譯出錯的提示)。

  一、doodads的demo

  首先請安裝MyGeneration 1.3或以上版本,這是開源免費(fèi)的,您無需為注冊碼焦頭爛額,下載地址是:http://www.mygenerationsoftware.com/,下載之后安裝,然后在安裝目錄下會找到如下的項(xiàng)目:

  使用vs2005或更高版本打開“dOOdad_Demo_2005.sln”,注意您是否安裝了sql server2000,因?yàn)檫@個demo用到了Northwind數(shù)據(jù)庫,嘗試運(yùn)行該項(xiàng)目,若報數(shù)據(jù)庫連接字符串需要修改,請修改web.config中的appSettings.dbConnection節(jié),運(yùn)行成功后出現(xiàn)如下的畫面:

  現(xiàn)在我們再來仔細(xì)看下一個典型的doodads項(xiàng)目的結(jié)構(gòu),是的,就是這么簡單:

  二、自己搭建一個基于doodads的項(xiàng)目

  首先,您必須準(zhǔn)備一個數(shù)據(jù)庫,本文的例子是基于sql server 2000的,數(shù)據(jù)庫中至少準(zhǔn)備一個表,當(dāng)然有視圖或者存儲過程可以使您體驗(yàn)到更多的東西

  現(xiàn)在建立一個asp.net web應(yīng)用程序,添加對“E:Program FilesMyGeneration13ArchitecturesdOOdadsCSharpdOOdad_DemodOOdad_Demo_2005.csproj”(當(dāng)然您需要修改這個地址為您的電腦上的mg安裝路徑)的引用,并且在web.config中的appSettings下建立dbConnection節(jié),value就是您的數(shù)據(jù)庫連接字符串

  建立App_Code/DAL文件夾,或者您新建一個名為DAL的類庫也行;

  (可選)建立App_Code/BLL文件夾,或者新建一個名為BLL的類庫也行;

  現(xiàn)在啟動mg,打開并啟動如下的模板(紅框內(nèi)的模板是必須的):

  這里四個模板分別表示:

  Invoke a stored procedure - 生成調(diào)用存儲過程的c#類,若有則生成

  Business Entity - 您可以理解為生成表的操作類,這是最基本的類

  Business View-視圖操作類,如果您有視圖則生成

  Concrete Class-聚合類(請饒恕我的翻譯),這里生成的類會對應(yīng)繼承是Business Entity中的類,可以理解為BLL類,可以將業(yè)務(wù)邏輯和DAL隔開,

  生成的Business Entity類或stored procedure或Business view請放到剛才建立的DAL文件夾中或者DAL類庫中

  (若有)生成的Concrete Class請放到BLL文件夾或BLL類庫

  當(dāng)然還需要一些引用或其他配置之類的,比如您的web app項(xiàng)目要引用DAL類庫和BLL類庫,視您的項(xiàng)目搭建情況而定

  現(xiàn)在編譯一下,是不是成功了!

  編譯成功了,不代表能夠運(yùn)行成功,如果您嘗試執(zhí)行類似如下的語句將會報錯:

  Employees emps = new Employees();

  emps.LoadByPrimaryKey(42);

  錯誤原因是找不到“proc_您的表名LoadByPrimaryKey”存儲過程”,于是我們發(fā)現(xiàn)了一個doo

?

轉(zhuǎn)載于:https://www.cnblogs.com/jes_shaw/archive/2009/06/10/1500064.html

總結(jié)

以上是生活随笔為你收集整理的小巧优美的ORM框架-doodads的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。