Moon.Orm 4.5技術詳解及研發平台免費發布


 

Moon.Orm總論

 

 

一、Moon.Orm概述

Moon.Orm是一個歷經三年開發一套.Net Orm框架.但凡眾多的智慧都是及其簡單的,但不為人所知.這也是Moon.ORM的主要特色:大道至簡.

不得不承認linq和lambda語句帶來的優雅,但同時我們需要承認linq的局限性:linq不是銀彈,因為負責的場合linq幾乎是做不到的,何況linq生成的sql不一定是你真正要的.(不是敵對linq,而是說實話,正如曾說:實際開發中沒有銀彈,只有平衡點,適合需求能解決實際情況的架構那就夠了).而且我也沒有必要再去寫一個框架,做一個類似Nhibernate,或者實體框架的東西.做東西我一直認為需要能有自我特色和自我優勢.

二、Moon.Orm特色及優勢

1.高性能是Moon.ORM優勢之一,也是我架構它的主要目的之一,我已經將它的性能提升到了極致.如以前我說的那樣,是為了彌補項目中遇到的性能問題而設計.可以說對於整個框架數據處理上采用了純的ADO.NET進行自動編譯的同時結合了EMIT達到快速生成實體的目的

2.易用性強,我想用過Moon.ORM的應該可以知道這點.配置簡單,智能感知,代碼生成器的輔助,會sql就可會用使用它;

3.多數據庫多數據源支持.在同一個項目中我們需要處理這種情況時,Moon.ORM是你最好的選擇.如你系統默認為MSSQL,現在要同時使用 MYSQL,你只需要實例化一個引擎就可以.DBFactory.GetEntity<Person> (pjy_AdminRoleTable.RoleID.BiggerThan(0),new MYSQL("連接字符串"));當然你可以把引擎做成全局的;

4.強大的語法糖功能.個人使用的結果是大概能滿足我實際需求的70%以上的功能;

5..NET 2.0原生支持,這個就不用說了;

6.數據庫更換方便,如果你發現你有一天你的數據庫需要從mysql轉變到mssql,你只需要轉變你的配置文件即可.(當然sql語法差異的問題,,如果你在用原生的sql進行操作時,你需要自己注意了);

7.數據庫變動一鍵重新編譯,無需手動修改代碼.

三、Moon.Orm實戰項目經驗

歷經了幾個公司的發展和使用,穩定性可得而知.曾在合富網絡的主營產品中應用於一年的開發框架中.及潘家園文化傳媒主營平台新系統.且得到Moon諸多愛好者在實際企業項目中的肯定.

四、使用問題

    此框架對於任何人群及個人可以免費使用,無償技術支持.

群一:216965349 群二:225656797 郵件:qsmy_qin@163.com

五、開發步驟

1.        配置及啟動研發平台

(1)      如果您要開發基於mysql數據庫的項目,請先在研發平台的配置文件中添加一個mysql.data.dll的路徑.

 

 

 

 

 

我們之所以這么做,是因為mysql.data.dll是基於GPL的,版權問題用戶需要自行解決.如果您開發sqlserver,postgreSQL,sqlite就可以免去上一個步驟.

MySql.Data.dll下載地址:

http://dev.mysql.com/downloads/mirror.php?id=406542

(2)啟動研發平台

 

 

 

(啟動界面)

我們現在需要新建一個項目.

 

 

(如何配置一個開發項目)

 

 

(填寫完畢后 登陸進入)

 

 

 

2.        生成實體層

 

 

 

 

 

 

3.        編譯實體層

 

 

 

4.        在您的實際項目中配置Moon.Orm

 

 

 

 

 

 

將這些數據復制到您實際的項目中的配置文件里面(appsettings下)

記住如果是mysql,需要向上面那樣指定mysql.data.dll的路徑

因入生成的dll或者直接用生成的*.cs

5.        進行編碼

 

 

 

 

六、如何使用Moon.Orm->CRUD

http://www.cnblogs.com/humble/archive/2012/12/01/2797450.html

 

using System;
using System.Collections.Generic;
using System.Data;

using Moon.Orm;
using MoonDB;
namespace r
{
    
class Program
    {
        
public static void Main(string[] args)
        {
           
//------------------------
            Console.
WriteLine("1 排序操作--------");
            List<UserSet> list=DBFactory.GetEntities<UserSet>(
                UserSetTable.ID.
BiggerThan(0).OrderBy(UserSetTable.UserName,true));
             
foreach (UserSet element in list) {
                Console.
WriteLine(element.UserName+"  "+element.ID);
             }
             
            
//-----------------------------------
            Console.
WriteLine("2 添加操作------");
            UserSet user=
new UserSet();
            user.date=DateTime.Now;
            user.datetime=DateTime.Now;
            user.money=
123M;
            user.UserName=
"秦時明月";
            
object newID=DBFactory.Add(user);
            Console.
WriteLine("新增數據的主鍵為:"+newID);

            Console.
WriteLine("3 修改操作------");
            
            UserSet updateUser=
new UserSet();
            updateUser.UserName=
"秦時明月-updateUser";
            
//設置更新目標
            updateUser.
SetOnlyMark(user.GetOnlyMark());
            DBFactory.
Update(updateUser);
            Console.
WriteLine("被修改的對象:"+updateUser.GetOnlyMark());
            Console.
WriteLine("修改后的對象值為:");
            
string name=DBFactory.GetOneField<string>(UserSetTable.UserName ,updateUser.GetOnlyMark());
            Console.
WriteLine(name);
            Console.
Read();
            
        }
    }
}

七、復雜查詢

i.          嵌套查詢

UserTable.ID.In(ClassTable.UserID.SelectWhere(CID.Equal(9));

-----------------------相當於-----

select * from user

where id in(

select userid from

class where cid=9) 

ii.        連接查詢

右連接查詢(左連接查詢是一樣的)

var list=DBFactory.GetRightJoinEntities<Customers,Orders>
                (CustomersTable.CustomerID.
Equal(OrdersTable.CustomerID),Field.ALL_WHERE,Field.ALL_FIELDS);
            
foreach (var a in list) {
                JoinData<Customers,Orders> data=a;
                Console.
WriteLine(data.Left.CustomerID+"  "+data.Left.CustomerName+" "+data.Right.OrderID);
            }

iii.     使用代碼生成器

生成類名 newUser=DBFactory.GetEntity(sql語句);

iv.      .NET 4.0的環境下使用dynamic

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

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

             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>());

 

八、常見問題

http://www.cnblogs.com/humble/archive/2012/12/12/2814040.html

 

九、最新版下載地址

http://www.cnblogs.com/humble/archive/2012/09/02/2667843.html

 

 


免責聲明!

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



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