提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数。
下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理。
功能描述:
1.支持Update语句
2.支持Insert语句
3. 支持Delete语句
4.支持事务
5.支持自定义增删查改语句
6.支持单表查询 ,多表查询
7.支持排序,分页语句
8.结果集可以是DataTable 也可 以是 List
9.结果集支持foreach 遍历
10.支持Oracle和MSSQLServer数据库
大部分常用功能下面代码已做了演示
DbMapper.1.0.0.3.下载地址
示例:
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using DBMapper; 5 using System.Data; 6 7 namespace DbMapperTest 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 try 14 { 15 string str_ticks=System.DateTime.Now.Ticks.ToString(); 16 int jlbh = int.Parse(str_ticks.Substring(str_ticks.Length - 8, 8)); 17 //---oracle测试 18 using (var dbMap = DbMapper.CreateDbMapper(DbMapper.PROVIDER_ORACLE, 19 "Password=test;User ID=test;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" 20 + "(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb)));")) 21 22 //----sqlserver测试 23 //using(var dbMap=DbMapper.CreateDbMapper(DbMapper.PROVIDER_SQLSERVER,"Data Source=DINT-PC;Integrated Security=True; database=TEST")) 24 { 25 //插入记录 26 dbMap.Insert(new Person 27 { 28 JLBH = jlbh, 29 NAME = "索额图", 30 ADDRESS = "皇宫", 31 AGE = 30, 32 PNO = "zzzzzzzzzzzzzzzzz" 33 }); 34 35 dbMap.Insert (new Course() 36 { 37 JLBH = jlbh, 38 NAME = "计算机科学与技术", 39 TIME = DateTime.Now.ToString() 40 }); 41 dbMap.Insert (new PersonCourse() 42 { 43 COUR_ID = jlbh, 44 PERSON_ID = jlbh, 45 }); 46 dbMap.Execute(false); 47 if(dbMap.Query ("select * from Person where JLBH=:JLBH",new Person{JLBH=jlbh}).Count>0) 48 Console.WriteLine("插入Person记录{0}成功", jlbh); 49 50 if (dbMap.Query ("select * from Course where JLBH=:JLBH", new Course { JLBH = jlbh }).Count > 0) 51 Console.WriteLine("插入Course记录{0}成功", jlbh); 52 53 if (dbMap.Query ("select * from PERSON_COURSE where PERSON_ID=:PERSON_ID", new PersonCourse { PERSON_ID = jlbh }).Count > 0) 54 Console.WriteLine("插入PersonCourse记录{0}成功", jlbh); 55 56 57 /*----------------修改--------------------------*/ 58 Console.WriteLine(""); 59 Console.WriteLine("-----------------修改-----------------"); 60 dbMap.Update (new Course { 61 JLBH=jlbh, 62 NAME = "计算机科学与技术(修正版)" 63 }); 64 int aff=dbMap.Execute(); 65 if (aff > 0) { 66 Console.WriteLine("插入Course记录{0}成功", jlbh); 67 } 68 69 70 /*----------------单记录查询---------------*/ 71 Console.WriteLine(""); 72 Console.WriteLine("----------------单记录查询---------------"); 73 //动态对象传递参数 .NET4.0及以上版本才支持的 74 Person aPerson = dbMap.Query ("select * from Person where JLBH=:JLBH", 75 new { 76 JLBH=jlbh 77 }).First; 78 Console.WriteLine("{0} {1} {2} {3}", aPerson.JLBH, aPerson.NAME, aPerson.PNO, aPerson.ADDRESS); 79 80 /*------------------------foreach遍历结果集--------------------------------*/ 81 Console.WriteLine(""); 82 Console.WriteLine("--------foreach遍历结果集-------------"); 83 foreach (Person cc in dbMap.Query (@"select P.JLBH PERSON#JLBH,P.NAME PERSON#NAME,P.PNO,P.ADDRESS,P.AGE, 84 C.NAME COURSE#NAME,C.TIME from PERSON P,COURSE C,PERSON_COURSE PC 85 where P.JLBH=PC.PERSON_ID and C.JLBH=PC.COUR_ID", null, null, null).OrderBy("PERSON#JLBH", true).Take(5)) 86 { 87 Console.WriteLine("{0} {1} {2}", cc.JLBH, cc.NAME, cc.PNO); 88 } 89 90 /*------------------------------返回结果数量 Count属性-------------------------------------*/ 91 Console.WriteLine(""); Console.WriteLine(""); 92 Console.WriteLine("-------------------返回结果数量 Count属性-----------------"); 93 int countPersons = dbMap.Query ("select * from Person", null).Count; 94 Console.WriteLine(countPersons.ToString()); 95 96 /*---------------------------多表查询----------------------------------------*/ 97 Console.WriteLine(""); Console.WriteLine(""); 98 Console.WriteLine("--------------------多表查询----------------------"); 99 100 DataTable at = dbMap.Query