讓我們開啟數據庫無Linq、零sql時代
Moon.Orm 5.0總論
第一部分 MQL
1、MQL預覽
public static void Main(string[] args)
{
using (SqlServer db=new SqlServer(@"Server=QSC-E15014A6665\SQLEXPRESS;Database=Test;uid=sa;Password=123456;"))
{
db.TransactionEnabled=true;
db.DebugEnabled=true;
Class c=new Class();
c.ClassName="綜合測試ClassName";
db.Add(c);
User user=new User();
user.ClassID=c.ClassID;
user.UserName="綜合測試UserName";
db.Add(user);
Score sc=new Score();
sc.TypeName="綜合測試TypeName";
sc.UserID=user.UserID;
sc.ScoreM=100;
db.Add(sc);
var mql=ScoreSet.SelectAll<ScoreSet>().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)))
))));
var sql=mql.ToDebugSQL();
Console.WriteLine(sql);
var list=db.GetEntities<Score>(mql);
foreach (var a in list) {
Console.WriteLine(a.UserID+"-"+a.TypeName+"-"+a.ScoreM);
}
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
2、關於MQL
MQL是Moon.Orm 5.0中的全新設計,目的在於讓我們的數據庫開發打造為無Linq、零sql.它全面貼近標准sql,噪音低.
Linq在數據庫開發過程中的存在,對於開發人員而言本質上就是智能感知.或許您不這么認為,會說:面向對象、匿名類型.
--我想說的是,面向對象帶來的好處真不明顯,一個托詞,怎么不說說Linq的弱勢呢?可以返回匿名類型,但你直接返給MVC的視圖試試,何況還有更偉大的東西.Moon.Orm之前的版本已經實現了.
MQL的構思廢了我很多時間,我想值得.
2.1、連接查詢
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName);
var m2=ClassSet.Select(UserSet.UserID).LeftJoin(m2).On(ClassSet.ClassID.Equal(UserSet.UserID)).Where(UserSet.UserID.BiggerThan(9));
2.2、嵌套查詢
var mql= ClassSet.Select(ClassSet.ClassID).Where(ClassSet.ClassName.StartWith("0443430").Or(ClassSet.ClassName.StartWith("uu")));
var mql =ScoreSet.SelectAll<ScoreSet>(). 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)))
))));
第二部分 Moon.Orm 5.0
1.關於Moon.Orm 5.0
5.0重新借鑒了先前的諸多思想,但從新構思和架構了核心底層(實體層,MQL的加入),也曾經給兄弟說要開源之前的版本(這些天家里不能上網,只能用手機了,大家見諒)如今我也要兌現了.
規范:
1.數據庫表必須有主鍵(這不必說)
2.主鍵:必須與業務無關,且唯一(這是數據庫設計的基礎,不要被業務牽着走)
3.目前5.0主鍵支持:自增、GUID
1.1簡化事務功能.
using (Db db=new SqlServer(@"Server=QSC-E15014A6665\SQLEXPRESS;Database=Test;uid=sa;Password=123456;"))
{
db.TransactionEnabled=true;
//---------隨便增刪改查
}
如上,系統會自動完成{}中的事務操作的.
1.2核心重構,標准化整體架構.
您需要了解Db類(上面的SqlServer就繼承了)中的方法怎么使用.最好的注釋就是不要注釋,讓大家見名思意.
1.3實體獲取的性能全面提升
該設計中將實體的數據設置,reader直接存入字典,具體字段后置到獲取時,性能這個大家一試便知.
項目及文檔下載: