没什么用的故事背景
今天来聊聊对于一个数据库表的增删改查工作,如果你还在咔咔手打SQL并沉浸在那种自虐的快乐中,那么请绕过本章继续享受生活,如果你已经恶心了手打SQL的枯燥的重复数据操作,不妨试试本章内容,将“对象”换成真的抱回家睡觉不香么?
基础知识概述(大神略过).
LINQ to DataSet - 对强类型化或弱类型化的DataSet或独立的DataTable进行查询
EntityFramework(EF)用来干什么的?
EF是一个非常强大的ORM框架,ORM的实质就是将数据库变成逻辑上可编程的对象实体,比如将表变成一个实体类,将表、视图、存储过程等等数据关系映射成集合等等。
总之我们不必太理解数据库的操作,而是可以像对待内存中的集合一样来操作数据库中的数据。
LINQ&EF带来的好处?
1. 解放数据库,无需手动创建(微软系优秀,其它呵呵)
2. 手写代码量大幅度减少
3. 数据库操作相关的几乎都不用管
4. 没有枯燥的数据接收与类型转换
5. 对象能做到的用对象,对象做不到的,直接SQL
总结起来一句话,万能的LINQ+强大的EF,一时间增删改查还是有点高手寂寞的意思。
在公众号内回复3008,获取LINQ+EF示例
注:示例开发使用VS2019,WPF,.Net Framework4.7.2,EntityFramework6,SQLServer2019

准备工作2:创建DbContext用于操作数据
using System.Data.Entity;
public class StudentDBContext: DbContext
{
public StudentDBContext() : base(@"Data Source=服务器名称;Initial Catalog=数据库名称;User ID=登录账户;Password=登录密码;")
{
//首次运行时 不存在数据库 进行初始化
Database.SetInitializer(new CreateDatabaseIfNotExists<StudentDBContext>());
}
}
准备工作3:创建学生类
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
/// <summary>
/// 此处Table属性 可指定也可以不指定
/// </summary>
[Table("Student")]
public class Student
{
/// <summary>
/// Key:主键
/// DatabaseGenerated(DatabaseGeneratedOption.Identity):自动增长列
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
/// <summary>
/// 学生姓名
/// MaxLength:用于限定nvarchar长度
/// </summary>
[MaxLength(50)]
public string SName { get; set; }
/// <summary>
/// 学号
/// </summary>
[MaxLength(20)]
public string CardNum { get; set; }
/// <summary>
/// 班级名称
/// </summary>
[MaxLength(20)]
public string ClassName { get; set; }
/// <summary>
/// 手机号
/// </summary>
[MaxLength(20)]
public string Phone { get; set; }
}
准备工作4:将学生加入到DbContext中,2步代码变为
using System.Data.Entity;
public StudentDBContext() : base(@"Data Source=.;Initial Catalog=SchoolDB;User ID=sa;Password=123456;")
{
//首次运行时 不存在数据库 进行初始化
Database.SetInitializer(new CreateDatabaseIfNotExists<StudentDBContext>());
}
/// <summary>
/// 学生信息
/// </summary>
public DbSet<Student> Students { get; set; }
这样在程序首次运行时,数据库就会自动创建好
至此,准备工作完成,接下来就要对数据表进行增删改查了
就这样,十分钟一个表维护,爽不爽?
当然,如我一般菜&懒的患者们是不甘心沉沦在EF的深坑中的,以下几款药也有相同的疗效,有的见效更快,但副作用嘛,咳咳... 谁用谁知道
Dapper
https://github.com/DapperLib/Dapper
"King of Micro ORM" Dapper是一个简单的.NET对象映射器,在速度方面具有几乎与使用原始的ADO.NET数据读取器一样快。
FreeSql
https://github.com/dotnetcore/FreeSql
一款功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
SqlSugar
https://github.com/donet5/SqlSugar
老牌 .NET 开源ORM框架,支持.NET CORE 和 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、达梦、人大金仓 数据库,具有EF NH的功能,比EF更人性化的语法,支持真实的批量操作,另外还有媲美Dapper的性能。
linq2db
https://github.com/linq2db/linq2db
最快的LINQ数据库访问库,在POCO对象和数据库之间提供了一个简单、轻量、快速且类型安全的层。在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步。