实体框架?nhibreate?见识一下另一个为实战而生的Orm
1.框架名:Moon 意思是月亮,而非Mono.因为很喜欢明月,所以以此为名.它是一个.NET下的Orm框架.
2.发展历史:历经近乎三年的发展历程,起因是EF框架的起初性能原因,为项目实战而生.
3.项目经验:经过数家公司项目实战、以及众多用户的肯定.
(因有格式丢失,请点此查看原版: 打造Orm经典.Moon.Orm开源及技术文档发布.(您还用hibernate?实体框架?)
Moon.Orm的追求方向:
1)高性能.
这也是架构创建的目的之一,已经将它的性能提升到了极致.大家可以自己测试.我可以说其性能是数一数二的.
连接地址:Moon洗冤录
2)易用性强
我想,用过Moon.ORM的应该可以知道这点.配置简单,智能感知,代码生成器的辅助,会sql就可使用之.
详情见,连接地址:Moon使用配置说明
3)多数据库多数据源支持
在同一个项目中我们常常需要处理这些情况时.目前moon的目标,支持sqlserver sqlite oracle mysql postgreSQL db2
如果您需要换数据库:直接修改配置文件然后一键生成实体层即可;
如果您需要多数据库:直接添加配置文件即可.详情:Moon使用配置说明
4)智能感知
这个不用讲了,值得一提的是MQL,她能够为你提供强大的智能感知功能,并且无数据库类型差异.
详情:MQL无linq化的战役
5).NET 2.0原生支持.
有人问:为什么没有LINQ、lambda,其实我只想说:没有必要做这些了,因为微软一个团队在做实体框架,去做一些不必要的事情,
真的没有意思. 觉得MQL复杂的兄弟们,有了智能感知,你们就适应适应,因为这是萝卜白菜的问题.
6) 使用便捷.
这个其实上面的链接也谈到,详情见:http://www.cnblogs.com/humble/p/3293500.html
一、使用sql及存储过程
1)使用List<Dictionary<string, MObject>>
1.使用sql
string sql="select * from Class where ClassName = @";
string sql2="select * from Class where DateTimem = @";
List<Dictionary<string, MObject>> mylist=db.ExecuteSqlToDictionaryList(sql,"boy'");
List<Dictionary<string, MObject>> mylist2=db.ExecuteSqlToDictionaryList(sql2,DateTime.Parse("2013-10-10 14:40:08"));
foreach(var oneClass in mylist){
string className=oneClass["className"].To<string>();
long id=oneClass["Classid"].To<long>();
DateTime datetimem=oneClass["datetimem"].To<DateTime>();//不用区分大小写
Console.WriteLine(className+" "+id+" "+datetimem);
}
2.使用mql
var list=db.GetDictionaryList(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0)))
2)使用MQL
2.1 MQL的标准查询
var mm=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName).
Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));
SELECT [Class].[ClassID],[Class].[ClassName] FROM [Class] WHERE [Class].[ClassName] LIKE @p1 AND [Class].[ClassID]>@p2
@p1=%s%
@p2=9
2.2 MQL的嵌套查询(含有Top查询:支持mysql、oracle、postgreSQL、sqlserver、sqlite)
var qiantao=ScoreSet.SelectAll().Where(
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
SELECT TOP 1 [Score].* FROM [Score] WHERE [Score].[UserID] IN (SELECT [User].[UserID] FROM [User] WHERE [User].[ClassID] IN (SELECT [Class].[ClassID] FROM [Class] WHERE [Class].[ClassName]=@p1 AND [Class].[ClassID]>@p2 ) )
@p1=综合测试ClassName2
@p2=0
2.3 MQL的分组查询
var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).
Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).
GroupBy(ScoreSet.TypeName).
Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
SELECT SUM([Score].[ScoreM]) AS 'sum',[Score].[TypeName] FROM [Score] WHERE [Score].[ScoreM]>=@p1 GROUP BY [Score].[TypeName] HAVING SUM([Score].[ScoreM])>@p2
@p1=100
@p2=300
2.4 MQL的连接查询
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
SELECT [Class].[ClassID],[Class].[ClassName],[User].[UserID] FROM [Class] LEFT JOIN [User] ON [Class].[ClassID]=[User].[UserID] WHERE [User].[UserID]>@p1
@p1=9
2.5 MQL的Union查询
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.UnionAll(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p1 UNION SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p2
@p1=1
@p2=2
SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p1 UNION ALL SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p2
@p1=1
@p2=2
2.6 MQL的使用预览
public static void Main(string[] args)
{
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
Console.WriteLine("---------------嵌套查询---------------------");
var qiantao=ScoreSet.SelectAll().Where(
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
Console.WriteLine("---------------分组查询---------------------");
var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).GroupBy(ScoreSet.TypeName).Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
Console.WriteLine("---------------连接查询---------------------");
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
}
Console.WriteLine("---------------Union测试---------------------");
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
}
}
3)使用DataSet
1.使用存储过程
DataSet dataset=db.ExecuteProToDataSet("存储过程名",参数一,参数二);
2.使用sql
DataSet dataset=db.ExecuteSqlToDataSet(sql,"boy");
3.使用mql
DataSet dataset=db.GetDataSet(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0)));
4)使用xml配置sql查询
1.配置config节点
<appSettings>
<add key="SQL_XML_FILE_NAME" value="C:\Moon\Moon.Orm\sql.xml"></add>//如果不是全路径,则默认在dll生成目录
</appSettings>
2.配置xml(sql.xml)
<?xml version="1.0"?>
<sqls>
<sqlxml id="getname">
<sql>select name from user where id>@</Sql>
<description>查询用户名(描述信息)</Description>
</sqlxml>
</sqls>
3.使用id进行查询
var list=db.GetDictionaryList(XmlHelper.GetSqlXmlByID("getname"),"boy");
5)无需实体类的设计思路
使用GetDynamicList ,让你体验另一种自由
object,但在.net 4.0下面,您可以用dynamic直接取值.
string sql22="select * from Score";
dynamic list22=db.GetDynamicList(sql22,"Score");
foreach(var a in list22){
Console.WriteLine(a.ID+"--"+a.ScoreM+"--"+a.UserID+"--"+a.TypeName);//都是强类型
}
以下是体验强类型:)
请加入第二个群
225656797
最近新闻
1)Moon.ORM5.0(MQL版) 隆重发布社区版代码生成器
2)Moon.ORM开源等重要疑问,您可以在线留言(有技术问题的话)
3)Moon.Orm 5.0 (MQL版) 版本维护及下载(跟踪发布)
4)Moon.ORM5.0总目录
支付宝:zhan_jp1989@126.com (请注明您的邮箱)
5)获取Moon.Orm5.0源代码的方式
相关博文1)Moon.Orm 5.0 (MQL版) 配置说明;
2)Moon.Orm 5.0 (MQL版) 版本维护及下载(跟踪发布);
3)Moon.Orm 5.0系列文章;
4)Moon.Orm全面介绍;