干活来袭,开源多年的Orm框架标准版源代码

无聊的一个人啊 2015-05-02 01:40:13
下载链接:http://pan.baidu.com/s/1i3xj0f7
解压密码:评论留邮箱即可获取,邮件回复于你:) 谢谢支持(稍后统一发送)
(第一批评论者已发放解压码,请查收邮件)

为什么选择Moon.Orm?

1)发现实体框架不能满足大型系统中性能需求;(兄台就不要辩论了,咱们已经辩论太多,累了)

2)其他开源框架使用起来配置麻烦,如mybatis,nh..........

3)sql在VS中没有智能感知,维护不便,如Dapper......

4)某些框架设计中一致性存在问题,语言晦涩.........

5)实战性强、被诸多企业使用[/align]

性能测评: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.开始使用
使用步骤:gif连接,动画演示:IE可以查看GIF
代码生成器地址:点击去看看 (这里是最新的)
对应的旗舰版的版本维护: http://lko2o.com/moon/article/3

3. 增删改查

/*
* 由SharpDevelop创建。
* 用户: 秦仕川
* 日期: 2013-8-22
* 时间: 14:56
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
using System.Threading;
using Moon.Orm;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using TestContext;

using Moon.Orm.Util;
namespace Test
{

class Program
{
/// <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;
}
}
/// <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;
}
}
/// <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;
}
}
/// <summary>
/// bool判断测试
/// </summary>
/// <returns></returns>
public static DictionaryList TestBool(){
using (var db=Db.CreateDefaultDb()) {
var testBool=OrdersSet.SelectAll().Where(OrdersSet.Finished.Equal(false));
var sql=testBool.ToDebugSQL();//等价sql语句
return db.GetDictionaryList(testBool);
}
}
/// <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);
}
}
/// <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);

}
}
/// <summary>
/// 获取Products表数据的总条数
/// </summary>
/// <returns></returns>
public static int GetProductCount(){
using (var db=Db.CreateDefaultDb()) {
var count2=db.GetInt32Count<ProductsSet>(ProductsSet.ProductId.BiggerThan(0));
return count2;
}
}
/// <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);
}

}
/// <summary>
/// 嵌套查询2
/// </summary>
/// <returns></returns>
public static DictionaryList QianTao2(){
using (var db=Db.CreateDefaultDb()) {
var testBool=OrdersSet.SelectAll().Where(
OrdersSet.OrderId.BiggerThan(2)
.And(
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);
}
}
/// <summary>
/// deep嵌套查询
/// </summary>
/// <returns></returns>
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);
}
}
public static void TestProc()
{
var addID=-11;
using (var db=Db.CreateDefaultDb())
{
db.DebugEnabled=true;
//开启事务功能
db.TransactionEnabled=true;
try {
Products p=new Products();
p.ProductName="ProductName_TestProc"+DateTime.Now;
p.Quantity=100;
p.Remark="标记";
p.Unit="单元";
p.UnitPrice=12m;
p.CategoryId=3;
db.Add(p);

addID=p.ProductId;
Console.WriteLine("p.ProductId:"+addID);
Orders order=new Orders();
order.Comment="test";
order.CustomerId=-43;//故意制造错误
order.Finished=false;
order.OrderDate=DateTime.Now;
order.SumMoney=33;

db.Add(order);
db.Transaction.Commit();


} catch (Exception ex) {
db.Transaction.Rollback();
var aa=ex.Message;
Console.WriteLine(aa);
}


}
Thread.Sleep(1000);
using (var db=Db.CreateDefaultDb())
{
Console.WriteLine("p.ProductId:"+addID);
var exist=db.Exist<ProductsSet>(ProductsSet.ProductId.Equal(addID));
Console.WriteLine("添加的数据存在吗?"+exist);
}
}
public static void Main(string[] args)
{
TestProc();

// var list=QianTao3();
// list.ShowInConsole();
// Console.WriteLine(list.Count);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);


}
}}



...全文
677 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
8023888 2017-08-09
  • 打赏
  • 举报
回复
楼主 这个解压码是什么啊?1459607886@qq.com 请发送邮箱
qq_17022841 2016-01-06
  • 打赏
  • 举报
回复
感谢楼主,邮箱:986015505@qq.com
zonesun 2015-12-30
  • 打赏
  • 举报
回复
感谢楼主的奉献,请发解压密码:271233566@qq.com
skuramatata 2015-06-23
  • 打赏
  • 举报
回复
感谢楼主,邮箱:skuramatata@sina.com
huwei001982 2015-06-23
  • 打赏
  • 举报
回复
引用 21 楼 effun 的回复:
请教一下,你的ORM和EF或Linq To SQL相比,除了性能以外,还有哪些优点?
同问
xinxin@chen 2015-06-19
  • 打赏
  • 举报
回复
多谢分享!楼主给力!
Ohyes陈陈 2015-06-19
  • 打赏
  • 举报
回复
感谢无私奉献:chenlinxun@qq.com
蜗牛慢慢趴 2015-06-19
  • 打赏
  • 举报
回复
感谢 绑定! 644415569@qq.com
john_QQ:2335298917 2015-06-19
  • 打赏
  • 举报
回复
感谢楼主,请发解压密码: liu_yuan_1981@hotmail.com
effun 2015-06-19
  • 打赏
  • 举报
回复
请教一下,你的ORM和EF或Linq To SQL相比,除了性能以外,还有哪些优点?
Thomas_xudong 2015-06-18
  • 打赏
  • 举报
回复
感谢楼主的奉献,请发解压密码:1258203504@qq.com
cxd515835 2015-06-18
  • 打赏
  • 举报
回复
LZ,看了你的官网,自己感觉你的官网没有必要做成适应各种屏幕及移动端吧?感觉有点不像是官网的样子,反倒有点个论坛………………你是不是可以考虑将你的官网和用户互动抽出来?然后将官网做的高大上一点呢?有点4不像……
cxd515835 2015-06-18
  • 打赏
  • 举报
回复
感谢楼主的奉献,请发解压密码:582443938@qq.com
cxd515835 2015-06-18
  • 打赏
  • 举报
回复
感谢楼主的奉献,请发解压密码:582443938@qq.com
cxd515835 2015-06-18
  • 打赏
  • 举报
回复
感谢楼主的奉献,请发解压密码:582442928@qq.com
w_xxxbbb 2015-05-11
  • 打赏
  • 举报
回复
yyhust@126. com 多谢。
w_xxxbbb 2015-05-11
  • 打赏
  • 举报
回复
多谢分享。
我叫小菜菜 2015-05-11
  • 打赏
  • 举报
回复
不错的样子
泡泡龙 2015-05-11
  • 打赏
  • 举报
回复
看着挺不错的 liucqa2@163.com
SWELLXXJ 2015-05-10
  • 打赏
  • 举报
回复
感谢楼主,请发解压密码:3647284000@qq.com
加载更多回复(8)

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧