上一篇文章简单的介绍了这个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(); } } }