Moon.ORM全攻略.Moon.ORM4.3穩定版(及代碼生成器企業版)發布.


Moon.ORM技術全攻略
請使用者升級到此版本(修復hashcode bug)

 一.緒論

      本文主要是針對Moon.ORM的技術的討論及其使用使用指導.如有其它疑問,請留言.本文從實際出發解析Moon.ORM.(技術群:

216965349
)

 

關於實體框架
       微軟不久前開源了EF5.0,獲取了其代碼發現並不能編譯,大致看了其代碼.優雅便捷可謂正統,但其實戰性仍待提高.

       1)Linq不能為我們生成理想的sql,而且linq自身的性能有損失.這是EF不得不面主要的問題.沒有完美的東西只有平衡點--沒有銀彈

       2)linq不能解決復雜度較高的查詢;而且微軟一開始試圖忽視數據庫的存在,但這是絕對不可能的.大家自己去思考.

       3)多數據庫多數據源問題解決較為麻煩;

       4)僅僅支持.net 4.5,目前無法在windows 2003上運行.

EF 的優點諸多不必多說.    Linq的優缺點似乎也成了EF的優缺點之一.微軟想通過Linq讓我們以一種面向數據對象的方式來思考,及持久化他們的數據.可是我們可想想數據庫的中 的記錄難道就不是對象了?Linq給人以優雅和便捷我想這是他明顯的優勢,然后就是匿名對象在其中發揮的重要作用.

...

 二.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.查詢一條記錄(一個實體)

            Administrator newUser=DBFactory.GetEntity(AdministratorTable.ID. Equal(userID).And(
AdministratorTable
.Age.Equal(12)));

        2.查詢多條記錄(多個實體)

            var list=DBFactory.GetEntities(AdministratorTable.ID. BiggerThan( 9));

        3.嵌套查詢(codeID作為外鍵指向Administrator的ID)

            var list=DBFactory.GetEntities(AdministratorTable.ID
                                                          . Equal(AttachmentTable.codeID. SelectWhere(AttachmentTable.fileName. Equal( "ee.txt"))));

        4.對於復雜的多表查詢,使用代碼生成器,把你的sql復制過去,然后它幫助你生成實體,最終

            NewOBJ newUser=DBFactory.GetEntity(sql語句);

        5.單一數據查詢.

            string userName=DBFactory.GetOneField< string>(AdministratorTable.UserName,AdministratorTable.ID. BiggerThan( 0));

             (注意可能報異常,比如查出來的數據為DBNull).

        6.記錄條數查詢.

            long count=DBFactory.GetCount(AdministratorTable.UserName,AdministratorTable.ID.BiggerThan(0));

        7. 返回其他的格式.可以參考API看DB

         (調用方法如:DBFactory.DefaultDB.GetDataSet("sql語句");)DefaultDB的類型為DB,其API可看幫助文檔;

 

 

        8 . 查詢單一字段.
       var userName=DBFactory.GetOneField< string>(UserTable.UserName,UserTable.Age. Equal( 12). And(UserTable.Tel. Equal( "qsmy")));
       

        9.指定字段對象查詢.

       var user=DBFactory.GetEntity(UserTable.Age+UserTable.UserName,UserTable.ID. Equal( 12));

        10.復雜查詢功能.Moon給出了三種解決方案.

          1.代碼生成器生成實體,把您的sql語句(無論多么復雜)放入代碼生成器,它會自動給你生成強類型實體,如第4條說的.

          2.智能實體,不需要代碼生成器,如下

             var list=DBFactory. GetIntelligentEntities( "select * from [User]");
            Console. WriteLine(list[index][ "username"].To< string>());(注意字段全是小寫)

            

            var user=DBFactory. GetIntelligentEntity( "select * from [User] where age>3");
            Console. WriteLine(user[ "username"].To< string>());

          3.動態編譯實體,同樣不需要代碼生成器(Moon5.0會與大家相見)

           

           
var list=DBFactory.GetAutoEntities( " 相當復雜的一個sql查詢語句 ", " 自定義類名 ");
for( var a  in list){
int count=a.Count;
string country=a.Country;
}

 

   

 
      二.數據添加操作.
            Administrator admin= new  Administrator();
            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));
      四.數據修改操作. 
            Administrator admin= new  Administrator();
            admin.UserName= "秦仕川"+DateTime.Now;
            admin.Password= "qsmy";
            admin. SetOnlyMark(AdministratorTable.ID. BiggerThan( 0));
             //開啟事務操作
            admin. StartTransaction( true);
             //返回主鍵值
            DBFactory. Update(admin);

 

七.需要明白的Moon.ORM設計前提

   1.對於數據庫的設計,每一個表必須要有主鍵;

   2.由業務決定邏輯的主鍵設計方案是錯誤的,所以主鍵是不能被業務牽制的,因為業務是變動的.Moon.ORM需建立獨立於業務

之外的.所以主鍵的設計MOON選擇的是guid或者自增的情況(建議用自增的方式).

 

八.使用說明

 

   使用說明:代碼生成器及使用說明

 

 

 

最新版下載地址 

 

 

 

示例代碼


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM