自己动手写ORM框架
发布时间:2020-12-16 08:58:48 所属栏目:asp.Net 来源:网络整理
导读:提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数。 ? 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理。 还有一些性能优化相关的功能没有做,这里并不想重复造轮子? 仅供学
提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数。 ? 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理。 还有一些性能优化相关的功能没有做,这里并不想重复造轮子? 仅供学习参考 功能描述: ? ?1.支持Update语句 ? ?2.支持Insert语句 ? ?3. 支持Delete语句 ? ?4.支持事务 ? ?5.支持自定义增删查改语句 ? ?6.支持单表查询 ,多表查询 ? ?7.支持排序,分页语句 ? ?8.结果集可以是DataTable ?也可 以是 List<T> 泛型集合,还可以是实体对象 ? ?9.结果集支持foreach 遍历 ? ?10.支持Oracle和MSSQLServer数据库 ? ?11.需要支持其他数据库可以参照 Oracle/MSSQLServer 实现相关扩展 大部分常用功能下面代码已做了演示 ?? DbMapper.1.0.0.3.下载地址 ? ?示例: 1 using System; 2 System.Collections.Generic; 3 System.Text; 4 DBMapper; 5 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<Person>(new Person 27 { 28 JLBH = jlbh,1)"> 29 NAME = 索额图,1)"> 30 ADDRESS = 皇宫 31 AGE = 30 32 PNO = zzzzzzzzzzzzzzzzz 33 }); 34 35 dbMap.Insert<Course>( Course() 36 37 JLBH = 38 NAME = 计算机科学与技术 39 TIME = DateTime.Now.ToString() 40 41 dbMap.Insert<PersonCourse>( PersonCourse() 42 43 COUR_ID = 44 PERSON_ID = 45 46 dbMap.Execute(false); 47 if(dbMap.Query<Person>(select * from Person where JLBH=:JLBH",new Person{JLBH=jlbh}).Count>0) 48 Console.WriteLine(插入Person记录{0}成功 49 50 if (dbMap.Query<Course>(select * from Course where JLBH=:JLBHnew Course { JLBH = jlbh }).Count > 51 Console.WriteLine(插入Course记录{0}成功 52 53 if (dbMap.Query<PersonCourse>(select * from PERSON_COURSE where PERSON_ID=:PERSON_IDnew PersonCourse { PERSON_ID = jlbh }).Count > 54 Console.WriteLine(插入PersonCourse记录{0}成功 55 56 57 /*----------------修改--------------------------*/ 58 Console.WriteLine(""); 59 Console.WriteLine(-----------------修改----------------- 60 dbMap.Update<Course>( Course { 61 JLBH=jlbh,1)"> 62 NAME = 计算机科学与技术(修正版) 63 64 int aff=dbMap.Execute(); 65 if (aff > ) { 66 Console.WriteLine( 67 } 68 69 70 ----------------单记录查询---------------*/ 71 Console.WriteLine( 72 Console.WriteLine(----------------单记录查询--------------- 73 动态对象传递参数 .NET4.0及以上版本才支持的 74 Person aPerson = dbMap.Query<Person>( 75 { 76 JLBH=jlbh 77 }).First; 78 Console.WriteLine({0} {1} {2} {3} 79 80 ------------------------foreach遍历结果集-------------------------------- 81 Console.WriteLine( 82 Console.WriteLine(--------foreach遍历结果集------------- 83 foreach (Person cc in dbMap.Query<Person,Course,PersonCourse>(@"select P.JLBH PERSON#JLBH,P.NAME PERSON#NAME,P.PNO,P.ADDRESS,P.AGE,1)"> 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_IDnull,1)">null).OrderBy(PERSON#JLBHtrue).Take(5 86 87 Console.WriteLine({0} {1} {2} 88 89 90 ------------------------------返回结果数量 Count属性------------------------------------- 91 Console.WriteLine(""); Console.WriteLine( 92 Console.WriteLine(-------------------返回结果数量 Count属性----------------- 93 int countPersons = dbMap.Query<Person>(select * from Personnull).Count; 94 Console.WriteLine(countPersons.ToString()); 95 96 ---------------------------多表查询---------------------------------------- 97 Console.WriteLine( 98 Console.WriteLine(--------------------多表查询---------------------- 99 100 DataTable at = dbMap.Query<Object>(101 102 false).Skip(1).Take().ToTable(); 103 foreach (DataRow arow in at.Rows) 104 105 Console.WriteLine({0} {1} {2} {3} {4}"],1)">PERSON#NAMECOURSE#NAMETIMEPNO]); 106 107 108 109 -------------------------返回结果集-----------------------------110 Console.WriteLine(111 Console.WriteLine(--------------------返回结果集----------------------112 List<Person> lstPersons = dbMap.Query<Person>(JLBHtrue).Skip(0).Take().ToList(); 113 foreach (Person p lstPersons) 114 115 Console.WriteLine(116 117 } 118 } 119 catch(Exception ex){ 120 Console.WriteLine(ex.Message); 121 122 } 123 } 124 125 还差一个根据表自动生成对象的工具 这里手动生成126 Person : IDbTableNaming { 127 [PrimaryKey]标示该列为主键 Update 函数需要 128 public int JLBH { get; set; } 129 string NAME { 130 string PNO { 131 string ADDRESS { 132 int AGE { 133 string IDbTableNaming.DBTableName映射到数据库中的表名 如果没有 则默认为类名 134 135 get { return PERSON136 137 138 Course : IDbTableNaming { 139 [PrimaryKey] 140 141 142 string TIME { 143 IDbTableNaming.DBTableName 144 145 COURSE146 147 148 PersonCourse:IDbTableNaming { 149 int PERSON_ID { 150 int COUR_ID { 151 152 153 PERSON_COURSE154 155 156 } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在asp.net中使用javascript为下拉列表框设置可见的true
- asp.net-mvc – 使用signalr时,将有任何连接限制在IIS
- asp.net-mvc – 在ASP.NET MVC视图中允许多少逻辑?
- 如何实现像WCF一样的Asp.net MVC OneWay / FireAndForget调
- 如何在asp.net中更改javascript警告框的标题?
- asp.net-core – ASP.NET 5中的HandleUnknownAction
- asp.net-mvc – 如果用户在int字段中放入非数字字符串,则自
- asp.net – 如何通过ADO.NET运行我的.sql脚本文件?
- 安装时安装Asp.Net SignalR错误
- asp.net-mvc – 在MVC Razor中保留数据,而不在请求之间使用
推荐文章
站长推荐
- asp.net-mvc – 在哪里可以找到C#示例代码来实现
- asp.net-mvc-5 – 在禁用的TextBoxFor中只读是什
- IIS7集成vs经典流水线 – 哪些使用更多的ASP.NET
- asp.net-mvc-4 – MVC Razor强类型视图中表行的回
- asp.net – 哪个控件导致回发?
- asp.net – 在客户端启用/禁用RequiredValidator
- 在ASP.NET 5响应中设置Content-Length标头
- asp.net-mvc-4 – MVC 4.5 Web API路由无法正常工
- asp.net – 在网页上播放mp3文件
- asp.net-mvc – 如何为每个ActionLink指定默认区
热点阅读