一.緒論
本文主要是針對Moon.ORM的技術的討論及其使用使用指導.如有其它疑問,請留言.本文從實際出發解析Moon.ORM.(技術群:
二.Moon.ORM的特色及優勢
----但凡眾多的智慧都是及其簡單的,但不為人所知.這也是Moon.ORM的主要特色:大道至簡.
1.高性能是Moon.ORM優勢之一,也是我架構它的主要目的之一,如以前我說的那樣,是為了彌補項目中遇到的性能問題而設計.可以說對於整個框架數據 處理上采用了純的ADO.NET進行封裝同時結合了EMIT達到快速生成實體的目的(當然到時候也可以用4.0的代碼生成器完成純ADO.NET的開 發).我不得不承認linq和lambda語句帶來的優雅,但同時我們需要承認linq的局限性.或許有人說可以通過手段進行一些彌補,如有人以提高 linq性能來寫文章一樣,但我們需要承認兩個事實,每次對linq的系統識別后才能進行優化,也就是說,linq的天性決定有性能損失.再次linq不 是銀彈,因為負責的場合linq幾乎是做不到的,何況linq生成的sql不一定是你真正要的.(注意:我不是敵對linq,而是說實話,正如曾說:實際開發中沒有銀彈,只有平衡點,適合需求能解決實際情況的架構那就夠了)而且我也沒有必要再去寫一個框架,做一個類似Nhibernate,或者實體框架的東西.做東西我一直認為需要做一個能有自我的特色和優勢.
2.易用性,我想用過Moon.ORM的應該可以知道這點.配置簡單,智能感知,代碼生成器的輔助,會sql就可會用Moon.
3.多數據庫多數據源支持.在同一個項目中我們需要處理這種情況時,Moon.ORM是你最好的選擇.如你系統默認為MSSQL,現在要同時使用 MYSQL,你只需要實例化一個引擎就可以.DBFactory.GetEntity (pjy_AdminRoleTable.RoleID.BiggerThan(0),new MYSQL("連接字符串"));當然你可以把引擎做成全局的.
4.語法糖功能.個人使用的結果是大概能滿足我實際需求的70%以上的功能.
5..NET 2.0原生支持,這個就不用說了.
6.數據庫轉變問題,如果你發現你有一天你的數據庫需要從mysql轉變到mssql,你只需要轉變你的配置文件即可.(當然sql語法差異的問題,你需要自己注意了,如果你在用原生的sql進行操作時).
三.維護問題.
有人曾說'都沒源代碼,所以我不能用'.我不能自比微軟,但我們可以換一個位置想想:知道.net framework 3.5 sp1中的bug嗎?微軟的庫中也會有bug信嗎?Moon.ORM標准版,一律免費使用(包括API文檔等)和群技術支持.對於企業用戶我會提供專門的 服務和技術支持以及更加美觀強大易用的企業版Moon.orm代碼生成器工具及技術培訓資料.
四.同類產品對比.
五. 絕對性能優勢
3.9版本后已將查詢性能提升到了極致≈純sql查詢的性能.
六.技術指導(主要提供絕大部分的情況,供參考,具體請看API文檔)
一.查詢操作.
1.查詢一條記錄(一個實體)
2.查詢多條記錄(多個實體)
3.嵌套查詢(codeID作為外鍵指向Administrator的ID)
. Equal(AttachmentTable.codeID. SelectWhere(AttachmentTable.fileName. Equal( "ee.txt"))));
4.對於復雜的多表查詢,使用代碼生成器,把你的sql復制過去,然后它幫助你生成實體,最終
NewOBJ newUser=DBFactory.GetEntity(sql語句);
5.單一數據查詢.
(注意可能報異常,比如查出來的數據為DBNull).
6.記錄條數查詢.
long count=DBFactory.GetCount(AdministratorTable.UserName,AdministratorTable.ID.BiggerThan(0));
7. 返回其他的格式.可以參考API看DB
(調用方法如:DBFactory.DefaultDB.GetDataSet("sql語句");)DefaultDB的類型為DB,其API可看幫助文檔;
9.指定字段對象查詢.
10.復雜查詢功能.Moon給出了三種解決方案.
1.代碼生成器生成實體,把您的sql語句(無論多么復雜)放入代碼生成器,它會自動給你生成強類型實體,如第4條說的.
2.智能實體,不需要代碼生成器,如下
Console. WriteLine(list[index][ "username"].To< string>());(注意字段全是小寫)
Console. WriteLine(user[ "username"].To< string>());
3.動態編譯實體,同樣不需要代碼生成器(Moon5.0會與大家相見)
for( var a in list){
int count=a.Count;
string country=a.Country;
}
admin.UserName= "秦仕川"+DateTime.Now;
admin.Password= "qsmy";
//開啟事務操作
admin. StartTransaction( true);
//返回主鍵值
int userID=Convert. ToInt32(DBFactory. Add(admin));
long count=DBFactory. DeleteWhen(AdministratorTable.ID. BiggerThan( 0));
admin.UserName= "秦仕川"+DateTime.Now;
admin.Password= "qsmy";
admin. SetOnlyMark(AdministratorTable.ID. BiggerThan( 0));
//開啟事務操作
admin. StartTransaction( true);
//返回主鍵值
DBFactory. Update(admin);
1.對於數據庫的設計,每一個表必須要有主鍵;
2.由業務決定邏輯的主鍵設計方案是錯誤的,所以主鍵是不能被業務牽制的,因為業務是變動的.Moon.ORM需建立獨立於業務
之外的.所以主鍵的設計MOON選擇的是guid或者自增的情況(建議用自增的方式).
使用說明:代碼生成器及使用說明