赞
踩
前言: 之前看微软的文档学了一会EFCore,当时觉得还不错,但是在工作中也没有使用。然后前段时间终于要答辩完了,也没有去总结,写点什么。反正趁作为学生身份最后的几天玩几天也无所谓了。
首先,SqlSugar的官网:https://www.donet5.com/
官网有详细的文档,也有相关的论坛,如果有问题可以到里面讨论,
在微软的文档中喜欢用这个词,其实意思就是把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; } }
准备完成后,你需要创建一个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
}) ;
然后就可以直接调用建表方法了。
//InitTables有多重三多种重载,用的比较多的为
//以namespace名为参数,将其下的Model映射成表
//以Type类型为参数,可以指定一个或多个Model类
//也可以直接指定泛型
scope.CodeFirst.InitTables(typeof(Student));
先在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)
)
然后再删除刚才生成的表,再到我们的测试单元中添加创建实体的语句
//只需要指定你需要的文件路径,即可生成到其路径下
scope.DbFirst.CreateClassFile("F:\\MicrosoftRepos\\SqlSugarTest\\SqlSugarTest\\Models");
运行测试单元后,即可看到生成的类了
之前在学习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>();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。