上一篇文章簡單的介紹了這個ORM的很基本的用法。
似乎看不出這個ORM有什么特別的地方,是的,這個ORM並不太特別。我認為他簡單易用是他的一個特點。
接上一篇
同過Sql語句填充實體
可能有時候有非常復雜的條件用來過濾記錄
this.Trans = new StreamContext("NIX"); List<ZULABELMEntity> dd = this.Trans.Querys<ZULABELMEntity>(Sql語句);
在性能方面個人感覺似乎也免強過得去,因為沒有跟那些太牛的ORM做過比較,只是簡單的跟Dapper做了測試比較,比較的結果如文章結尾所示。
測試程序我也不是很清楚是否公正。
測試代碼如下。

namespace JitEngine.TDriver { using Dapper; using Dot.StreamObject; using Muki.Entity; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Diagnostics; using System.Linq; using System.Threading; public class Multiple { private StreamContext Trans; public void Dapper(string _dbAdapter,string cSQLString,int times,int top) { GC.Collect(); int gc0 = GC.CollectionCount(0); int gc1 = GC.CollectionCount(1); int gc2 = GC.CollectionCount(2); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); SqlConnection connection = GetOpenConnection(_dbAdapter); long duration1=0; int rec=0; string xx=""; for (int x=0;x<times;x++) { List<ZULABELMEntity> dd= connection.Query<ZULABELMEntity>(cSQLString).ToList(); foreach (ZULABELMEntity test in dd) { xx=test.LABEL_ID; rec++; } } duration1 = stopwatch.ElapsedMilliseconds; Console.WriteLine(""); Console.WriteLine(xx); Console.WriteLine(string.Concat(new object[] { "Dapper: 記錄數 ", rec, " 時間 ", duration1, "ms" })); Console.WriteLine("GC 0:" + (GC.CollectionCount(0) - gc0).ToString()); Console.WriteLine("GC 1:" + (GC.CollectionCount(1) - gc1).ToString()); Console.WriteLine("GC 2:" + (GC.CollectionCount(2) - gc2).ToString()); } public void Querys(string _dbAdapter, string cSQLString, int times, int top) { GC.Collect(); int gc0 = GC.CollectionCount(0); int gc1 = GC.CollectionCount(1); int gc2 = GC.CollectionCount(2); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); this.Trans = new StreamContext("NIX"); long duration1 = 0L; int rec = 0; string xx = ""; for (int x = 0; x < times; x++) { List<ZULABELMEntity> dd = this.Trans.Querys<ZULABELMEntity>(cSQLString); foreach (ZULABELMEntity test in dd) { xx = test.LABEL_ID; rec++; } } duration1 = stopwatch.ElapsedMilliseconds; Console.WriteLine(""); Console.WriteLine(xx); Console.WriteLine(string.Concat(new object[] { "Querys: 記錄數 ", rec, " 時間 ", duration1, "ms" })); Console.WriteLine("GC 0:" + ((GC.CollectionCount(0) - gc0)).ToString()); Console.WriteLine("GC 1:" + ((GC.CollectionCount(1) - gc1)).ToString()); Console.WriteLine("GC 2:" + ((GC.CollectionCount(2) - gc2)).ToString()); } public static SqlConnection GetOpenConnection(string x) { SqlConnection connection = new SqlConnection(x); connection.Open(); return connection; } public static void Main(string[] args) { string _dbAdapter = "server=192.168.28.125;database=fms_muki;uid=sa;pwd=m123456;"; Setting.Instance().RegisterDbConnectionInfo("NIX", "MsSqlServer", _dbAdapter); StreamContext Trans = new StreamContext("NIX") { Writeable = true }; for (int i = 0; i <= 100; i++) { ZULABELMEntity _AddNewEntity = new ZULABELMEntity { UID_CODE = "xxxx", LANG_CODE = "ENG", LABEL_ID = "temp" + i }; Trans.RetrieveEntity(_AddNewEntity); if (!_AddNewEntity.Verified) { _AddNewEntity.LANG_NAME = "temp-new" + i; } else { _AddNewEntity.LANG_NAME = "temp-update" + i; } Trans.SaveChanges(_AddNewEntity); } Trans.Commit(); Thread.Sleep(500); Multiple _t = new Multiple(); int times=10; string cSQLString = "SELECT [ZULABELM].[LABEL_ID] AS [LABEL_ID],[ZULABELM].[LANG_CODE] AS [LANG_CODE],[ZULABELM].[UID_CODE] AS [UID_CODE],[ZULABELM].[LANG_NAME] AS [LANG_NAME],[ZULABELM].[ZADD_DATE] AS [ZADD_DATE],[ZULABELM].[ZADD_USER] AS [ZADD_USER],[ZULABELM].[ZCHG_DATE] AS [ZCHG_DATE],[ZULABELM].[ZCHG_FLAG] AS [ZCHG_FLAG],[ZULABELM].[ZCHG_USER] AS [ZCHG_USER],[ZULABELM].[ZSECURITY_CODE1] AS [ZSECURITY_CODE1],[ZULABELM].[ZSECURITY_CODE2] AS [ZSECURITY_CODE2],[ZULABELM].[ZSECURITY_CODE3] AS [ZSECURITY_CODE3],[ZULABELM].[ZSECURITY_CODE4] AS [ZSECURITY_CODE4],[ZULABELM].[ZSECURITY_CODE5] AS [ZSECURITY_CODE5],[ZULABELM].[ZSECURITY_CODE6] AS [ZSECURITY_CODE6],[ZULABELM].[ZSECURITY_RIGHT] AS [ZSECURITY_RIGHT] FROM [ZULABELM]"; _t.Querys(_dbAdapter, cSQLString, times, 0); _t.Dapper(_dbAdapter, cSQLString, times, 0); Console.WriteLine("調換位置"); _t.Dapper(_dbAdapter, cSQLString, times, 0); _t.Querys(_dbAdapter, cSQLString, times, 0); Console.WriteLine("按任意鍵退出"); Console.ReadLine(); } } }