基于.NET实现高效ORM自定义开发(学习笔记)

基于.NET实现高效ORM自定义开发
学习视频链接
https://www.bilibili.com/video/BV1zT4y137TR?p=1
常老师讲解的通俗易懂


一、关于ORM

ORM:(Object Relation Mapping) 对象关系映射

因为我们开发的软件绝大部分是基于数据库开发的,因此一定会涉及到数据库访问技术

在.NET平台典型的数据库访问技术是基于ADO.NET,特点是效率非常高,但是在开发的效率上有局限性

ORM框架解决的问题:为开发者自动生成AQL语句和参数封装的任务

其他ORM框架:EF6.0 EFCore 自己写一个OEM框架(功能没那么强大,但是足够项目使用)

第三方的:Dapper.Net(.NETCore) 非常流行,原因是轻量级


二、框架的设计

1、框架的目的:帮我们自动生成SQL语句和参数封装

2、如何生成SQL语句?如何封装参数?

思路1:我们使用ORM框架的有哪些条件可以利用?

实体类是数据表的映射,也就是说,如果我们知道一个实体类,我们就可以明确这个实体类对应的数据表的所有字段的名称、数据类型、数据表名称

思路2:如何将一个实体类的这些内容解析出来?如果实体类中包括数据表中没有的字段,如何处理?

解决方法1:反射技术可以给我们提供所需要的的全部信息
解决方法2:给不需要的属性打上“标签”,在C#程序中使用的就是特性。

特性是?特性一种类,能够发到类、属性、方法上边。用来标识这个类、属性或者方法的特殊用途


三、框架的实现

1、创建特性类,给属性打上标签

思考:我们需要什么样的特性?(特性必须专用)
在update或者delete的时候,需要根据主键

扩展属性特性:ExtendPropertyAttribute

剔除标识列的特性:IdentityAttribute

主键:PrimaryKeyAttribute

2、根据已经设计好的带着特性的实体类,生成SQL语句和参数

记住:在所有的ORM框架中,会有一个DBContext类,叫做数据库上下文类,
实现自动的insert update delete select
以实现自动insert为例:


public int InsertModel(Object model)
{
    //[1]获取实体对象的属性数组(属性名称、属性数据类型、属性值)	
    PropertyInfo[] proArry = model.GetType().GetProperties();
    //[2]组合SQL语句
     StringBuilder sqlFiled = new StringBuilder($"insert into {model.GetType().Name} (");
     StringBuilder sqlValues = new StringBuilder(" values (");
     List<SqlParameter> paramList = new List<SqlParameter
     //[3] 找到要过滤的字段

    //[4]组合sql语句

    retrun 0;
}

四、框架设计也有局限性

第一,任何框架都有自己的优势和不足,不要认为框架的功能是完美的
第二,我们必须学会使用.NET自带的EF,同时也得会使用第三方的,最后还要自己熟练写一个
实际开发中,可以根据自己的需要,选择合适的


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值