手撸ORM浅谈ORM框架之Delete篇
快速传送
手撸ORM浅谈ORM框架之Query篇
后续待定。。。。。。
前人修路后人行
BaseRepository-》GetCurrentTableName已经在《手撸ORM浅谈ORM框架之Add篇》BaseRepository里面的方法,不重复搬砖了。
BaseRepository-》GetKey已经在《手撸ORM浅谈ORM框架之Update篇》BaseRepository里面的方法,不重复搬砖了。
哼,就这???
我们先来看看删除Sql语句,DELETE FROM TABLE_NAME WHERE 列名称 = 值 (删除符合WHERE条件的数据)、DELETE FROM TABLE_NAME 或 DELETE * FROM TABLE_NAME(删除所有的行,保留表的结构、属性和索引都是完整的);相对于Insert和UpdateDelete需要的信息更少,按照我们所需要的Delete Sql依赖反射的原理动态拼接出来Sql语句,我们明白了删除的Sql语句大刀阔斧开始干就完了。
BaseRepository-》GetDeleteSql(提高性能可以优化,缓存当前项目所有表的增删查改Sql语句)
1 /// <summary>
2 /// get update sql
3 /// </summary>
4 /// <param name="entity">entity</param>
5 /// <returns>return update sql</returns>
6 private string GetDeleteSql(T entity)
7 {
8 string tableName = GetCurrentTableName();
9 StringBuilder stringBuilder = new StringBuilder();
10 stringBuilder.AppendFormat("DELETE FROM {0} WHERE ", tableName);
11 List<PropertyInfo> propertyKeys = GetKey();
12 foreach (var propertyKey in propertyKeys)
13 {
14 stringBuilder.AppendFormat("{0}=@{0} AND ", propertyKey.Name);
15 }
16 stringBuilder.Remove(stringBuilder.Length - 4, 4);
17 return stringBuilder.ToString();
18 }
BaseRepository-》泛型Delete;
1 /// <summary>
2 /// delete entity
3 /// </summary>
4 /// <param name="entity">entity</param>
5 /// <returns>return true or false</returns>
6 public bool Delete(T entity)
7 {
8 string sql = GetDeleteSql(entity);
9 MySqlParameter[] parameters = GetMySqlParameters(GetKey().ToArray(), entity);
10 int row = context.Database.ExecuteSqlRaw(sql, parameters);
11 return row > 0 ? true : false;
12 }
实操Repository方法;
1 public bool Delete(Learn_Student learnStudent)
2 {
3 using (MySqlDbContext mySqlDbContext = new MySqlDbContext())
4 {
5 BaseRepository<Learn_Student> baseRepository = new BaseRepository<Learn_Student>(mySqlDbContext);
6 return baseRepository.Delete(learnStudent);
7 }
8 }
注:learn-orm-net目前只是作为学习ORM框架原理的Demo,项目会做出一定的优化处理,但不能直接拿来在项目中使用,毕竟现在NET Framework、NET Core已经有很多优秀的ORM框架,NET下一次发布就是只有一个版本了,我们没有必要重复造轮子,造轮子是因为没有现成的优秀的轮子可用。
代码下载地址: SourceCode 作者水平有限欢迎园友纠正错误及不恰当之处,予以及时修正以免误导他人!
手撸ORM浅谈ORM框架之Delete篇的更多相关文章
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Update篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Query篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸基于swoole 的分布式框架 实现分布式调用(20)讲
最近看的一个swoole的课程,前段时间被邀请的参与的这个课程 比较有特点跟一定的深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. 内容听 ...
- 【SSH学习笔记】浅谈SSH框架
说在前面 本学期我们有一门课叫做Java EE,由陈老师所授,主要讲的就是Java EE 中的SSH框架. 由于陈老师授课风格以及自己的原因导致学了整整一学期不知道在讲什么,所以才有了自己重新学习总结 ...
- 浅谈chainer框架
一 chainer基础 Chainer是一个专门为高效研究和开发深度学习算法而设计的开源框架. 这篇博文会通过一些例子简要地介绍一下Chainer,同时把它与其他一些框架做比较,比如Caffe.The ...
- 浅谈ORM操作
2. ORM(对象关系映射) 1. 映射的关系 DB ORM 数据表 <--> 类 数据行 <--> 对象 字段 <--> 属性 2. Django项目使用MySQ ...
- 【带你手撸Spring】没有哪个框架开发,能离开 Spring 的 FactoryBean!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 老司机,你的砖怎么搬的那么快? 是有劲?是技巧?是后门?总之,那个老司机的代码总是可 ...
随机推荐
- 使用JWT登录生成token
package com.example.demo.util; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import co ...
- C#中WebBrowser获取页面标签class值
由于class是JavaScript的保留关键字 所以在C#中使用GetAttribute("className")来获取hmtlElement的class值 而不是GetAttr ...
- 在搞OSS对象存储中发现了自身的一些不足
最近在搞OSS对象存储,发现了自身的一些不足,趁着有空在此做个总结,希望能够帮助到大家!!! 首先解释下OSS,Object Storage Service(对象存储服务),一般的云公司,都会提供OS ...
- django_apscheduler 0.4.0删除了name字段
使用django_apscheduler时默认使用了最新版本,为0.4.2版本,但是在这个版本中,使用migrate 生成定时任务模型时没有了name字段,导致之前写的定时任务不能执行. 翻了下 dj ...
- linux应用-线程操作
文章写得好,转载一下, https://blog.csdn.net/triorwy/article/details/80380977
- three.js学习5_渲染器
THREE.WebGLRenderer WebGL Render 用WebGL渲染出你精心制作的场景 介绍 在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展 ...
- matlab中datest() 将日期和时间转换为字符串格式
来源:https://ww2.mathworks.cn/help/matlab/ref/datestr.html?searchHighlight=datestr&s_tid=doc_srcht ...
- C语言中time_t数据类型详细介绍
包含文件:<time.h> #ifndef __TIME_T #define __TIME_T /* 避免重复定义 time_t */ typedef long time_ ...
- 《穷查理年鉴》贪嗔痴 & 懒贪装(关于败坏)
贪嗔痴 & 懒贪装 1)伤害 041.仇恨加重伤害,漠视消除伤害. 042.90%的伤害是自己造成的. 044.伤害你的敌人使你比他更低下;仇恨使你和他一样;宽恕才能让你超越他. 109.让仇 ...
- jq显示数据在kindeditor
1,定义编辑器的变量为全局变量 2,将数据显示到kindeditor 在我自己这里_下划线相当于数据,也就是将数据显示在kindeditor 中的textarea中 3,jquery获取kinde ...