LiteORM-For-DotNet,我的第一个开源库
这是一个DotNet轻量级ORM框架,解决C#.Net开发过程中重复繁琐的数据库CURD操作。
前言
因工作中接手的.net项目,源码里面都用了动软代码生成的源码做为数据库操作类库。其中,有些根本就没有用到,今后也不会用到的冗余代码——垃圾代码。而每次如果有表结构修改,就得重新生成表实体/手动修改实体类,然后再修改代码中实体类逻辑,再修改DAL(数据库访问层)的赋值代码、sql字段、数据类型。
于是,产生一个想法,借鉴EF的理念,利用反射技术,用表实体去操作数据库,做增、改、删、查处理。并且,将表实体类更精细化标注,增加了字段名、主键、自增长、注释【标题】、数据类型、长度的属性标识,更有利于实体生成更优的sql脚本。
由此,通过反射技术把所有表CUDR操作的统一处理,以前修改了表结构,就得更新表实体类、修改逻辑代码、修改DAL。现在,只需求更新表实体及对应的逻辑代码就可以,不用再去维护DAL代码,干掉那些每个DAL层中70%的代码,达到精简代码,提高开发效率的目的。
有了这个想法,便开始了冗长的撸代码,断断继继历经两个月的时间,终于完成了构想的雏形。然后,又花点时间去了解一下怎么玩github,把源码库传到上面去。放出来,让有需要的人拿去用,希望各位看官多多指教、发表意见,大家一起改进,完善。
下面奉上我的github地址,走过路过的都进来看看,给个Star就更好不过了。
详情介绍
项目开源库结构图

1、YEasyModel
主要实体类反射类库,定义实体类字段的数据类型、长度、主键等特性;定义CURD方法,查询参数表达式、排序表达式。利用lambda定义查询逻辑,生成sql过滤条件;查询/更新字段定义,通过反射生成对应的Sql参数;排序逻辑定义,生成字段排序规则;DataTable与实体类转换方法。
2、ModelApp
winform程序,用于配置连接数据库,定义命名空间、实体类名,生成指定的表/视图的实体模型;
3、WebDemo
Webapi范例,简单的表实体模型使用说明;
(暂时先写这些,后面有时间再完善)
性能
以下四种不同方式查询数据库记录并转为实体类的测试:
m1,DataSet实体表查询记录;
m2,YEasyModel实体类工具查询记录;
m3,三层工厂模式查询记录,实例化一次,后面从缓存取得实例;
m4,Entity Framework查询记录;
查询消耗的时间单位是毫秒。
第一次查询1条记录

第二次查询1条记录

第三次查询1条记录

第四次连续执行50次的查询1条记录

执行1次查询8条记录

连续执行50次的查询8条记录

根据以上多种测试结果对比得出:
m1 —— DataSet排第三;
m2 —— YEasyModel其次;
m3 —— 三层工厂模式最快,因为有实例化缓存,第二次开始便不用再创建实例对象, 单条数据查询时,速度优势明显。但需要维护的逻辑代码多;
m4 —— EF最慢,且劣势明显;太慢了!
总结
(有空再写)
最后,奉上github地址:https://github.com/michaelyes/LiteORM-For-DotNet。
LiteORM-For-DotNet,我的第一个开源库的更多相关文章
- 我的第一个开源项目-logger4Net
学会学习,学会分享,学会创造. 这我的第一个开源项目.以前总觉得开源离自己很远,但通过不断学习发现,其实自己已经走在这条路上.思想就在那,只要懂得学习,懂得分享,就会懂享受创造的快乐感与殷实感. 没做 ...
- 全球第一免费开源ERP Odoo Ubuntu最佳开发环境独家首发分享
起源 近年来随着国内的互联网经济的快速腾飞,诞生了很多开源软件创造的市场价值以及企业价值神话,特别是对于企业ERP领域,一直以来都是高昂的国内外产品充实,国内的中小成长型企业越来越需要一套好看又能打, ...
- 我的第一个开源控件-DragGridView
我的第一个开源控件出炉了,希望各个小伙伴给个star,支持下.项目地址 1. 前言 因为项目须要,要做一个相似腾讯视频.频道管理.拖拽排序的效果.这个控件是在原地址 之上改造出来的.先看下效果图. 1 ...
- 我的第一个开源项目 Kiwis2 Mockserver
我的第一个开源作品Kiwis2 Mock Server,目前公测中,欢迎大家提供宝贵意见. 代码:https://github.com/kiwis2/mockserver 主页:https://kiw ...
- 聊聊第一个开源项目(内网穿透) - CProxy
文章首发:聊聊第一个开源项目 - CProxy 作者:会玩code 初衷 最近在学C++,想写个项目练练手.对网络比较感兴趣,之前使用过ngrok(GO版本的内网穿透项目),看了部分源码,想把自己的一 ...
- 我的第一个开源作品Kiwis2 Mock Server
我的第一个开源作品Kiwis2 Mock Server,目前公测中,欢迎大家提供宝贵意见. 代码:https://github.com/kiwis2/mockserver 主页:https://kiw ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- 开源库Magicodes.ECharts使用教程
目录 1 概要 2 2 Magicodes.ECharts工作原理 3 2.1 架构说明 3 2.1.1 Axis 4 2.1.2 CommonD ...
- iOS项目中常用的第三方开源库
1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...
随机推荐
- JSON的简单使用之提取多层嵌套的JSON(C#)
JSON.NET(http://json.codeplex.com/)使用来将.NET中的对象转换为JSON字符串(序列化?),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?) 反序列 ...
- 基于Ajax的前后端分离
这种开发模式可以称为SPA (Single Page Application 单页面应用)时代. 这种模式下,前后端的分工非常清晰,前后端的关键协作点是 Ajax 接口.看起来是如此美妙,但回过头来看 ...
- Redis 学习笔记(篇六):数据库
Redis 是一个使用 C 语言编写的 NoSql 的数据库,本篇就讲解在 Redis 中数据库是如何存储的?以及和数据库有关的一些操作. Redis 中的所有数据库都保存在 redis.h/redi ...
- python课堂整理19----迭代器和生成器
一.概念 • 迭代器协议: 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,以终止迭代(只能往后走,不能往前退) • 协议是一种约定,pyt ...
- 名称空间(name space)
名称空间(name space) 函数编程中,有一个挥之不去的问题:变量名的定义. 我们知道,在相同的作用域内不能出现两个相同的变量名,否则前者被后者覆盖 我们还知道,局部变量的名字可以与全局变量的名 ...
- React Hooks 深入系列 —— 设计模式
本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ...
- rocksdb编译步骤——Java、Golang、mac
如果不是必要不建议自己编译rocksdb,编译的过程比较耗时费力.现在已经有很多编译好的文件可供使用. Java <!-- https://mvnrepository.com/artifact/ ...
- tab选项卡代码
$('.case_header ul li').click(function(){ $(this).addClass('active').siblings().removeClass('active' ...
- Windbg程序调试系列-索引篇
最近整理了一下Windbg程序调试系列的文章,做个了索引贴,方便大家查询.搜索: Windbg程序调试系列1-常用命令说明&示例 Windbg程序调试系列1-Mex扩展使用总结 Windbg程 ...
- Ubuntu 磁盘挂载错误
一.错误 报错原因: 在删除或者复制移动时,磁盘或者u盘等外接硬件设备,忽然掉落(断掉,接口松动),在次挂载磁盘时就会出现错误 错误日志: $MFTMirr does not match $MFT ( ...