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

 

 

posted @ 2013-05-01 10:44  [秦时明月]  阅读(2990)  评论(20编辑  收藏  举报