TinyORM
是前幾天看到 This week in .Net介紹的新的ORM Framework
想說挺有趣的,就跟著Wiki在.Net 4.5.2搭配localdb做了個demo
基本的查詢指令
1 2 3 4 5 6 7 8
| var db = DbContext.CreateDbContext ("Data Source=(localdb)\\mssqllocaldb;;Initial Catalog=tempdb;" + "Integrated Security=True;Pooling=true;Max Pool Size=3000;"); var rows = db.QueryAsync("select [Answer] = 2 + 3").Result; Console.WriteLine(rows[0].Answer); Console.WriteLine(rows[0]["Answer"]); Console.WriteLine(rows[0][0]);
|
結果:
對應到已存在的類別
1 2 3 4
| public class POCO { public int Answer { get; set; } }
|
1 2 3 4 5 6
| var rows = db.QueryAsync("select [Answer] = 2 + 3").Result; var poco = (rows[0] as RowStore).ToObject<POCO>(); var pocoViaFactory = (rows[0] as RowStore).ToObject(() => new POCO()); Console.WriteLine(poco.Answer); Console.WriteLine(pocoViaFactory.Answer);
|
1 2 3 4 5 6 7
| var ids = db.QueryAsync("select [Answer] = object_id from sys.objects;").Result; var pocoArray = ids.ToObjectArray<POCO>(); var pocoArrayViaFactory = ids.ToObjectArray(() => new POCO()); for (var i = 0; i < pocoArray.Length; ++i) Console.WriteLine(ids[i].Answer); Console.WriteLine(string.Empty); for (var i = 0; i < pocoArrayViaFactory.Length; ++i) Console.WriteLine(ids[i].Answer);
|
參數化查訊搭配匿名物件
1 2 3 4 5 6 7
| var ids1 = db.QueryAsync( "select [Answer] = object_id from sys.objects where object_id between @low and @high;", new { @low = 10, @high = 40 }).Result; foreach (var ids in ids1) { Console.WriteLine(ids.Answer); }
|
參數化查訊搭配Where In
1 2 3 4
| var ids2 = db.QueryAsync( "select [Answer] = object_id from sys.objects where object_id in (@range)", new { @range = Enumerable.Range(1, 40) }).Result;
|
參數化查訊條件為NULL
1 2 3 4 5 6 7 8
| var emptyResult = db.QueryAsync( "select [Answer] = object_id from sys.objects where object_id = @id", new { @id = default(int?) }).Result; Console.WriteLine("Result Count: " + emptyResult.Count); foreach (var ids in emptyResult) { Console.WriteLine(ids.Answer); }
|
參數化查訊搭配Dictionary
1 2 3 4 5 6 7 8 9
| var parameters = new Dictionary<string, object> { { "@low", 10 }, { "@high", 40 } }; var idsDict = db.QueryAsync( "select [Answer] = object_id from sys.objects where object_id between @low and @high;", parameters).Result; foreach (var ids in idsDict) { Console.WriteLine(ids.Answer); }
|
欄位名稱大小寫是有差別
1 2 3
| var rows = db.QueryAsync("select [Answer] = 2 + 3").Result; Console.WriteLine(rows[0].Answer is FieldNotFound); Console.WriteLine(rows[0].answer is FieldNotFound);
|
使用TinyORM提供的RowStore顯示資料
1 2 3
| var row = db.QueryAsync("select * from sys.objects").Result.First(); foreach (var column in row) Console.WriteLine("[{0}] [{1}]", column.Key, (column.Value ?? "[NULL]").ToString());
|
使用TinyORM提供的RowStore並用row.ToString()顯示資料
1 2
| var row = db.QueryAsync("select * from sys.objects").Result.First(); Console.WriteLine(row);
|
使用匿名物件接收result
1 2 3
| var rows = db.QueryAsync("select top (4) * from sys.objects").Result; foreach (var row in rows) Console.WriteLine(new { Name = (string)row.name, ObjectId = (int)row.object_id });
|
Link