LINQ&EntityFramework解放双手早点下班

没什么用的故事背景

今天来聊聊对于一个数据库表的增删改查工作,如果你还在咔咔手打SQL并沉浸在那种自虐的快乐中,那么请绕过本章继续享受生活,如果你已经恶心了手打SQL的枯燥的重复数据操作,不妨试试本章内容,将“对象”换成真的抱回家睡觉不香么?

基础知识概述(大神略过).

LINQ都能做哪些工作?
LINQ to Objects:集合对象的查询
LINQ to SQL:针对SQL Server的查询,它是一个带有可视化的操作界面的ORM工具

LINQ to DataSet - 对强类型化或弱类型化的DataSet或独立的DataTable进行查询

LINQ to Entity - 对实体框架中EDM定义的实体集合进行查询。
LINQ to XML - 对XML文档进行查询创建等操作。

EntityFramework(EF)用来干什么的?

EF是一个非常强大的ORM框架,ORM的实质就是将数据库变成逻辑上可编程的对象实体,比如将表变成一个实体类,将表、视图、存储过程等等数据关系映射成集合等等。

总之我们不必太理解数据库的操作,而是可以像对待内存中的集合一样来操作数据库中的数据。

LINQ&EF带来的好处?

1. 解放数据库,无需手动创建(微软系优秀,其它呵呵)

2. 手写代码量大幅度减少

3. 数据库操作相关的几乎都不用管

4. 没有枯燥的数据接收与类型转换

5. 对象能做到的用对象,对象做不到的,直接SQL

总结起来一句话,万能的LINQ+强大的EF,一时间增删改查还是有点高手寂寞的意思。

在公众号内回复3008,获取LINQ+EF示例    

下面我们来个示例,以学生表的增删改查演示一下LINQ+EF的便捷之处,此处使用高级一点的CodeFirst方式,使数据库、表自动生成

注:示例开发使用VS2019,WPF,.Net Framework4.7.2,EntityFramework6,SQLServer2019  

准备工作1:引入环境
LINQ&EntityFramework解放双手早点下班

准备工作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; }

这样在程序首次运行时,数据库就会自动创建好

LINQ&EntityFramework解放双手早点下班

至此,准备工作完成,接下来就要对数据表进行增删改查了

LINQ&EntityFramework解放双手早点下班

LINQ&EntityFramework解放双手早点下班

LINQ&EntityFramework解放双手早点下班

LINQ&EntityFramework解放双手早点下班

就这样,十分钟一个表维护,爽不爽?

LINQ&EntityFramework解放双手早点下班

当然,如我一般菜&懒的患者们是不甘心沉沦在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 高出一步。