標准版源代碼下載:
鏈接:http://pan.baidu.com/s/1i3xj0f7
因五一早過(現在中旬了),解壓碼獲取請到: http://www.cnblogs.com/humble/p/3323161.html
為什么選擇Moon.Orm?
1)發現實體框架不能滿足大型系統中性能需求;(兄台就不要辯論了,咱們已經辯論太多,累了)
2)其他開源框架使用起來配置麻煩,如mybatis,nh..........
3)sql在VS中沒有智能感知,維護不便,如Dapper......
4)某些框架設計中一致性存在問題,語言晦澀.........
5)實戰性強、被諸多企業使用
性能測評:http://www.cnblogs.com/humble/p/3472764.html
1.簡介
Moon是一個 orm 框架.關於它和其他 實體框架、NH 的對比,大家可以閱讀:www.cnblogs.com/humble/p/3426888.html
Moon.Orm,意在打造高性能、易用、便捷、易於維護、多數據庫數據源支持的 Orm 框架。
全方位介紹:最全面的介紹文檔(點擊這里)
2.使用步驟
1.下載代碼生成器生成model;
2.引用model及moon.orm到你的具體項目;
3.填寫你的項目中配置文件;(關於配置文件:地址)
4.開始使用;
使用步驟:點擊去看看,這里很久以前的示例,大家可用新版本
代碼生成器鏈接地址:點擊下載(這里是最新的)
對應的旗艦版的版本維護:點擊這里,可到這里隨時更新

3.增刪改查
(下面代碼對應的下載地址:http://pan.baidu.com/s/1mg3iZ12
注意:
1.請將數據庫附加到您的數據庫中.數據庫下載地址:http://pan.baidu.com/s/1eQjIz7O
2.注意修改對應的配置文件中連接字符串;
)
數據庫關系

/// <summary> /// 添加實體對象的測試 /// </summary> /// <returns></returns> public static void TestAddEntity(){ using (var db=Db.CreateDefaultDb()) { var startCount=GetProductCount(); Products p=new Products(); p.ProductName="ProductName"+DateTime.Now; p.Quantity=100; p.Remark="標記"; p.Unit="單元"; p.UnitPrice=12m; p.CategoryId=3; db.Add(p); //克隆一個p對象,然后添加到數據庫中 var p2=p.Clone<Products>(); db.Add(p2); var endCount=GetProductCount(); Console.WriteLine("添加條數為:"+(endCount-startCount)); } } /// <summary> /// 刪除實體對象的測試 /// </summary> public static void TestRemoveEntity(){ using (var db=Db.CreateDefaultDb()) { var startCount=GetProductCount(); Products p=new Products(); p.ProductName="ProductName"+DateTime.Now; p.Quantity=100; p.Remark="標記"; p.Unit="單元"; p.UnitPrice=12m; p.CategoryId=3; db.Add(p); //刪除這條新加的數據 db.Remove<ProductsSet>(ProductsSet.ProductId.Equal(p.ProductId)); var endCount=GetProductCount(); Console.WriteLine("添加條數為:"+(endCount-startCount)); } } public static void TestUpdateEntity(){ using (var db=Db.CreateDefaultDb()) { db.DebugEnabled=true; var p=db.GetEntity<Products>(ProductsSet.SelectAll().Top(1)); Console.WriteLine(p.ProductName); p.ProductName=p.ProductName+DateTime.Now; p.Quantity=11; //必須通過設置WhereExpression來指定需要更新哪些數據 //--的確讓用戶有點誤解,但這樣可以指定更廣泛的合符條件的數據如>100 and a<100 p.WhereExpression=ProductsSet.ProductId.Equal(p.ProductId); db.Update(p); var sql=db.CurrentSQL; p=db.GetEntity<Products>(ProductsSet.SelectAll().Top(1)); Console.WriteLine(p.ProductName); } }
2.mql查詢語句
1)分組查詢
/// <summary> /// 測試group及having語句 /// </summary> public static DictionaryList TestHaving(){ using (var db=Db.CreateDefaultDb()) { var mql=OrdersSet.Select(OrdersSet.OrderId.Count(),OrdersSet.CustomerId,OrdersSet.Finished) .Where(OrdersSet.CustomerId.SmallerThan(20)) .GroupBy(OrdersSet.CustomerId,OrdersSet.Finished) .Having(OrdersSet.OrderId.Count().BiggerThan(2)).Top(5); var sql=mql.ToDebugSQL();//等價sql語句 var list=db.GetDictionaryList(mql); return list; } }
SELECT TOP 5 COUNT([Orders].[OrderId]),[Orders].[CustomerId], [Orders].[Finished] FROM [Orders] WHERE [Orders].[CustomerId]<@p1 GROUP BY [Orders].[CustomerId] ,[Orders].[Finished] HAVING COUNT([Orders].[OrderId])>@p2 @p1=20 @p2=2
2)連接查詢
/// <summary> /// 測試join語句 /// </summary> public static DictionaryList TestJoin(){ using (var db=Db.CreateDefaultDb()) { var mql1=CustomersSet.Select(CustomersSet.CustomerName); var join=mql1.LeftJoin(OrdersSet.SelectAll()) .ON(OrdersSet.CustomerId.Equal(CustomersSet.CustomerId).And(OrdersSet.OrderId.SmallerThan(1000))) .Where(OrdersSet.OrderId.BiggerThan(1)).Top(10); var sql=join.ToDebugSQL();//等價sql語句 var list=db.GetDictionaryList(join); return list; } }
SELECT TOP 10 [Customers].[CustomerName],[Orders].* FROM [Customers] LEFT JOIN [Orders] ON ( [Orders].[CustomerId]= [Customers].[CustomerId] AND [Orders].[OrderId]<@p1 ) WHERE [Orders].[OrderId]>@p2 @p1=1000 @p2=1
3)多連接查詢
/// <summary> /// 測試三條jion的語句 /// </summary> public static DictionaryList TestHighJoinMQL(){ using (var db=Db.CreateDefaultDb()) { var mql1=CustomersSet.Select(CustomersSet.CustomerName); var doubleJoin=mql1.LeftJoin(OrdersSet.Select(OrdersSet.OrderId.AS("_OrderId"))) .ON(OrdersSet.CustomerId.Equal(CustomersSet.CustomerId).And(OrdersSet.OrderId.SmallerThan(100))) ; var threeJoin=doubleJoin.LeftJoin(OrderDetailsSet.SelectAll()) .ON(OrderDetailsSet.OrderId.Equal(OrdersSet.OrderId).And(OrderDetailsSet.OrderId.BiggerThan(2))) .Where(OrdersSet.OrderId.SmallerThan(999)).Top(10); var sql=threeJoin.ToDebugSQL();//等價sql語句 var list=db.GetDictionaryList(threeJoin); return list; } }
SELECT TOP 10 * FROM (SELECT [Customers].[CustomerName],[Orders]. [OrderId] as "_OrderId" , [OrderDetails].* FROM [Customers] LEFT JOIN [Orders] ON ( [Orders].[CustomerId]=[Customers].[CustomerId] AND [Orders].[OrderId]<@p1 ) LEFT JOIN [OrderDetails] ON [OrderDetails]. [OrderId]=[Orders].[OrderId] AND [OrderDetails].[OrderId]>@p2 WHERE [Orders].[OrderId]<@p3 ) TopTemp1 @p1=100 @p2=2 @p3=999
4)嵌套查詢
/// <summary> /// 嵌套查詢 /// </summary> /// <returns></returns> public static DictionaryList QianTao(){ using (var db=Db.CreateDefaultDb()) { var testBool=OrdersSet.SelectAll().Where( OrdersSet.CustomerId.In( CustomersSet.Select(CustomersSet.CustomerId).Where(CustomersSet.CustomerName.Contains("00")) ).And(OrdersSet.OrderId.BiggerThan(8)) ); var sql=testBool.ToDebugSQL();//等價sql語句 return db.GetDictionaryList(testBool); } }
SELECT [Orders].* FROM [Orders] WHERE [Orders].[CustomerId] IN (SELECT [Customers].[CustomerId] FROM [Customers] WHERE [Customers].[CustomerName] LIKE @p1 ) AND [Orders].[OrderId]>@p2 @p1=%00% @p2=8
5)Union查詢
/// <summary> /// Union測試 /// </summary> /// <returns></returns> public static DictionaryList TestUnion(){ using (var db=Db.CreateDefaultDb()) { var mql1=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.BiggerThan(10)); var mql2=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.SmallerThan(10)); var mql3=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.Equal(10)); var mql=mql1.Union(mql2).Union(mql3).Top(1); var sql=mql.ToDebugSQL();//等價sql語句 return db.GetDictionaryList(mql); } }
SELECT TOP 1 * FROM (SELECT [Customers].* FROM [Customers] WHERE [Customers].[CustomerId]>@p1 UNION SELECT [Customers].* FROM [Customers] WHERE [Customers].[CustomerId]<@p2 UNION SELECT [Customers].* FROM [Customers] WHERE [Customers]. [CustomerId]=@p3 ) TopTemp1 @p1=10 @p2=10 @p3=10
6)深度嵌套
public static DictionaryList QianTao3(){ using (var db=Db.CreateDefaultDb()) { var mql1=CustomersSet.Select(CustomersSet.CustomerId).Where(CustomersSet.CustomerName.Contains("00")); var mql2=OrdersSet.Select(OrdersSet.OrderId).Where(OrdersSet.CustomerId.In(mql1)); var mql3=OrderDetailsSet.Select(OrderDetailsSet.ProductId).Where(OrderDetailsSet.OrderId.In(mql2)); var mqlEnd=ProductsSet.SelectAll().Where(ProductsSet.ProductId.In(mql3).And(ProductsSet.Quantity.BiggerThan(2))); var sql=mqlEnd.ToDebugSQL(); return db.GetDictionaryList(mqlEnd); } }
SELECT [Products].* FROM [Products] WHERE [Products].[ProductId] IN ( SELECT [OrderDetails].[ProductId] FROM [OrderDetails] WHERE [OrderDetails].[OrderId] IN ( SELECT [Orders].[OrderId] FROM [Orders] WHERE [Orders].[CustomerId] IN ( SELECT [Customers].[CustomerId] FROM [Customers] WHERE [Customers].[CustomerName] LIKE @p1 ) ) ) AND [Products].[Quantity]>@p2 @p1=%00% @p2=2
