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
