当前位置:   article > 正文

SqlSugar初体验|比EFCore更优秀_sqlsugar和ef哪个好用

sqlsugar和ef哪个好用

前言: 之前看微软的文档学了一会EFCore,当时觉得还不错,但是在工作中也没有使用。然后前段时间终于要答辩完了,也没有去总结,写点什么。反正趁作为学生身份最后的几天玩几天也无所谓了。

首先,SqlSugar的官网:https://www.donet5.com/
官网有详细的文档,也有相关的论坛,如果有问题可以到里面讨论,

1.迁移与逆向迁移

在微软的文档中喜欢用这个词,其实意思就是把Model映射到数据库生成表。(建表)
反向迁移就是从数据库的表都读出来生成对应的Model

下面是一些和其他的框架的个人经验对比,如果想看如何使用可直接跳过。

这里如果你有hibernate或JPA的经验,这个迁移就是hibernate/jpa的ddl-auto属性,主要用来设置从数据模型到数据库表之中映射的行为。而且设置起来非常简单,只需要在配置文件中设置你要的这个属性的ddl属性的值就行了。
这里如果你有EFCore的经验,你大概也会觉得EFCore的数据迁移有些繁琐。
其一,要使用命令行工具,
其二,要多条命令配合–还需要设置必要的参数
其三,调试麻烦,要删除还需要remove-migration等命令
如果直接在代码里建表和调试一定会更简单和直白的,但我也不知道为什么要从包管理控制台来进行ORM操作。

一行代码建表

(试例使用SqlServer)
SqlSugar的建表就可以直接通过代码调用生成,比EFCore更方便
这里先准备一个Model

 public class Student
 {
 	  //sqlSugar提供了一个SugarColumn注解,它有非常多的属性用来完成
 	  //设置ORM的规则,你只需要记住这一个注解,然后根据提示选择需要的属性即可
 	  
      [SugarColumn(IsPrimaryKey = true,IsIdentity = true)]
      public int ID { get; set; }

      [SugarColumn(IsNullable = false)]
      public string Name { get; set; }

      public int Age { get; set; }

      [SugarColumn(SerializeDateTimeFormat = "yyyy-MM-dd")]
      public DateTime Birth { get; set; }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

准备完成后,你需要创建一个SqlSugarScope或者SqlSugarClient,
然后按照直接调用建表方法即可。(两个对象的创建方法相同)

//这里以SqlSugarScope为例,只需要将Connection对象作为初始化参数即可、
SqlSugarScope scope = new SqlSugarScope(new ConnectionConfig()
            {
                //创建数据表时可以直接在一个类似NUnit的测试类中来做,比较方便
                //但在实际的.NET CORE Web开发使用时,这些配置信息都要在StartUp中读取项目的配置文件来获得
                ConnectionString = "server=.;database=SqlSugarTest;uid=xxxxxx;pwd=xxxx",
                //SqlSugar默认支持多种数据库,你也不需要数据库连接的依赖
                DbType = DbType.SqlServer,

                //是否自动关闭连接池
                IsAutoCloseConnection = true

            }) ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

然后就可以直接调用建表方法了。

//InitTables有多重三多种重载,用的比较多的为
//以namespace名为参数,将其下的Model映射成表
//以Type类型为参数,可以指定一个或多个Model类
//也可以直接指定泛型
scope.CodeFirst.InitTables(typeof(Student));

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

请添加图片描述
先在NUnit测试单元里创建表,运行成功后数据库也出现了对应的表
请添加图片描述
进一步的实体关系配置也很简单,可以直接参考教程的这一章
https://www.donet5.com/home/doc?masterId=1&typeId=1188

一行代码创建实体

从数据库的表反向映射到Model上,就是文档中说的什么反向迁移。
这种也是我认为可能出现在我的工作中的情况,
毕竟一把梭的开发都是别人先设计好表,然后我们再根据表的结构创建Model,纯纯的数据容器,
好像业务代码就是纯粹的Sql编辑,整个API开发大部分时间都是个人肉Sql编辑器,没有自己的设计。。。。
让人感到是纯纯的板砖。。。。

当然砖还是要搬的,SqlSugar为我减少了板砖的步骤还是很让人高兴了
创建实体前,先确保你的数据库里有表

示例
先在数据库里随便建一张表

create table Person(

 Id int identity(1,1) primary key,

 Name varchar(20) Not Null,

 Age int,

 Address varchar(50)

)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后再删除刚才生成的表,再到我们的测试单元中添加创建实体的语句

//只需要指定你需要的文件路径,即可生成到其路径下
scope.DbFirst.CreateClassFile("F:\\MicrosoftRepos\\SqlSugarTest\\SqlSugarTest\\Models");
  • 1
  • 2

运行测试单元后,即可看到生成的类了
请添加图片描述

2.不需要自定义DbContext更方便的使用

之前在学习EFCore的时候,DbContext是我们必要自己动手配的,你可以将一些需要的数据存放在不同的DbContext(比如根据用来区分不同数据库的数据什么的),
DbContext其实是一个类似hibernate的Session的组件,自定义肯定是更为灵活的,但不同DbContext也需要分别在包管理控制台去分开完成数据迁移(建表和建实体),有一点麻烦,
而如果使用SqlSugar提供的SqlSugarScope,它是个单例的组件,只需要在容器中注册一次就可以了,很方便的(SqlSugar也提供了非单例的SqlSugarClient用来满足更高级的一些需求)

常见的增删改查直接在SqlSuarScope对象中调用方法即可。

scope.Insertable<Person>(new Person() { Name = "张三", Age = 22, Address = "江西" });

scope.Updateable<Person>(new Person() { Name = null, Age = 22, Address = null });

scope.Deleteable<Person>(new Person() { Name = });
//查询同样是EFCore中的LINQ用法,非常的熟悉
scope.Queryable<Person>();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/400206
推荐阅读
相关标签
  

闽ICP备14008679号