ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:34.37KB ,
资源ID:8439181      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8439181.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(让C#开发更简单抽象增删改.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

让C#开发更简单抽象增删改.docx

1、让C#开发更简单抽象增删改让C#开发更简单,抽象增删改相信经常做一些MS,CRM 项目的童鞋非常有体会,大部分时间都是在复制和粘贴,大部分项目框架都是建一个三层,首先是DAL建一些增删改查,然后呢是BLL业务层再建一些增删改 查,然后UI层再调用增删改查,整个过程非常的繁琐,开发效率并不是很高,这种项目做久了之后,就非常的痛苦,非常的无聊。今天我给大家带来一个抽象出增 删改查的框架,相信有些大牛早就总结出来了,不喜勿喷哈,本人旨在分享。你再也不用写增删改查了,我给你抽象出来了!现在业界火了一种ORM 框架,那就是Dapper,我也是Dapper的粉丝之一,而我总结出来的框架也是基于Daaper

2、。下面是我的代码,首先是Dapper Helper类,数据库通用访问类(用Nuget工具先把Dapper类引用到NetUtility.Dapper.Core项目中去):NetUtility.Dapper.Core.DataBaseAccess.csusingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingDapper;using

3、System.Data;usingNetUtility.Entity;usingSystem.Reflection;namespaceNetUtility.Dapper.Core/数据库访问类/publicclassDataBaseAccesspublicstaticSqlConnectionCreateConnection()stringconnStr=ConfigurationManager.ConnectionStringsconnString.ConnectionString;SqlConnectionconn=newSqlConnection(connStr);conn.Open()

4、;returnconn;/执行增、删、改方法/publicstaticintExecute(stringsql,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.Execute(sql,parms);/得到单行单列/publicstaticobjectExecuteScalar(stringsql,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.ExecuteScalar(sql,parms);/单个数据集查询/p

5、ublicstaticListQuery(stringsql,Funcpre,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.Query(sql,parms).Where(pre).ToList();/单个数据集查询/publicstaticListQuery(stringsql,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.Query(sql,parms).ToList();/多个数据集查询/publicst

6、aticSqlMapper.GridReaderMultyQuery(stringsql,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.QueryMultiple(sql,parms);/单个数据集查询/publicstaticTEntityFirstOrDefault(stringsql,Funcselector,objectparms=null)using(IDbConnectionconn=CreateConnection()returnconn.Query(sql,parms).Where(s

7、elector).FirstOrDefault(); 我把增删改查抽象出来了,少不了的就是SQL语句的生成,生成SQL语句,要么是映射,要么是反射,而我用的是反射,给一个Entity类,我读取他所有属性和字段,然后生成对应的SQL语句。 NetUtility.Dapper.Core.DataMapping.csusingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingSystem.Threa

8、ding.Tasks;namespaceNetUtility.Dapper.CoreinternalclassDataMappingwhereTModel:class#region数据库类型+DataBaseType/数据库类型/publicstaticstringDataBaseTypegetstringstrType=ConfigurationManager.AppSettingsDataBaseType;if(!string.IsNullOrEmpty(strType)returnstrType;elsereturnstring.Empty;#endregion#region主键属性字段

9、+PrimaryKey/主键字段名称/publicstaticstringPrimaryKeygetTypet=typeof(TModel);TableInfoAttributetableInfo=t.GetCustomAttribute(typeof(TableInfoAttribute),true)asTableInfoAttribute;if(tableInfo!=null)/如果没有标识表信息特性,则通过表名向数据库中得到主键信息returntableInfo.PrimaryKey;elsestringtableName=TableName();returnDataBaseAccess

10、.ExecuteScalar(SELECTnameFROMSysColumnsWHEREid=Object_Id(+tableName+)andcolid=(selecttop1colidfromsysindexkeyswhereid=Object_Id(+tableName+).ToString();#endregion#region获取表名+TableName/获取表名/数据库表名前缀/publicstaticstringTableName(stringprev=)Typet=typeof(TModel);TableInfoAttributetableInfo=t.GetCustomAtt

11、ribute(typeof(TableInfoAttribute),true)asTableInfoAttribute;returntableInfo!=null?tableInfo.TableName:string.Concat(prev,t.Name);#endregion#regionSelect查询语句+GetQuerySql/Select查询语句/publicstaticstringGetQuerySql()StringBuildersql=newStringBuilder(select*from);sql.Append(TableName();returnsql.ToString(

12、);#endregion#regionInsert非Null属性的对象实例Sql语句+GetInsertSql/Insert非Null属性的对象实例Sql语句/publicstaticstringGetInsertSql(TModelmodel)StringBuildersql=newStringBuilder(insertinto);stringprops=Propertys(model);sql.Append(TableName();sql.Append();sql.Append(string.Join(,props);sql.Append()values();sql.Append(str

13、ing.Join(,props);sql.Append();selectIDENTITY);returnsql.ToString();#endregion#regionDeleteSql语句+GetDeleteSql/DeleteSql语句/publicstaticstringGetDeleteSql()returnstring.Format(deletefrom0where1inIdList,TableName(),PrimaryKey);#endregion#regionUpdate非Null属性的对象实例Sql语句+GetUpdateSql/Update非Null属性的对象实例Sql语句

14、/publicstaticstringGetUpdateSql(TModelmodel)StringBuildersql=newStringBuilder(update);stringprops=Propertys(model);sql.Append(TableName();sql.Append(set);foreach(stringpropNameinprops)sql.Append(propName+=+propName+,);sql.Remove(sql.Length-1,1);sql.Append(where+PrimaryKey+=Id);returnsql.ToString();#

15、endregion#region非主键且非Null属性集合+Propertys/非主键且非Null属性/publicstaticstringPropertys(TModelmodel)PropertyInfoprops=typeof(TModel).GetProperties();Listlist=newList();stringkey=PrimaryKey;if(props!=null&props.Length0)foreach(PropertyInfopropinprops)if(prop.GetValue(model,null)!=null&!prop.Name.Equals(key,S

16、tringComparison.OrdinalIgnoreCase)list.Add(prop.Name);returnlist.ToArray();#endregion代码中的TableInfoAttribute 类是我建一个属性特性类,用于标识表名和主键名称的特性类,假如Entity实体类上面没有标识主键名称,框架默认会用Entity类名作为表名,建议最好标识一下表名和主键名称。NetUtility.Dapper.Core.TableInfoAttribute.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceNetUtility.Da

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1