本文章是我听B站杨中科的所做的笔记
杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili
什么时ORM
1、说明:本课程需要你有数据库、SQL等基础知识
2、ORM:Object Relational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入:
User user = new User(){Name="admin",Password="123"};
orm.Save(user);
比如查询:
Book b = orm.Books.Single(b=>b.Id==3
||b.Name.Contains(".NET"));
string bookName = b.Name;
string aName = a.Author.Name;
3、有哪些ORM:EF Core、Dapper、SqlSugar、FreeSql等
EF Core与其他ORM比较
1、Entity Framework Core(EF Core)是微软官方ORM框架。优点:功能强大、官方支持、生产效率高、力求屏蔽数据库差异;缺点:复杂、上手门槛高、不熟悉EFCore的话可能会进坑。
2、Dapper。优点:简单、N分钟即可上手,行为可预期性强;缺点:生产效率低,需要处理底层数据库差异
3、EF Core是模型驱动的开发思想,Dapper是数据库驱动的开发思想的。没有优劣,只有比较。
4、性能:Dapper不等于性能高;EF Core不等于性能差。
5、EF Core是官方推荐、推进的框架,尽量屏蔽底层数据库差异,.NET开发者必须熟悉,根据的项目情况再决定用哪个。
选择
1、建议:对于后台系统、信息系统等和数据库相关开发工作量大的系统,且团队比较稳定,用EF Core;对于互联网系统等数据库相关工作量不大的系统,或者团队不稳定,用Dapper
2、在项目中可以混用,只要注意EF Core的缓存、Tracking等问题即可
EF Core与EF比较
1、EF有DB First、Model First、Code First。EF Core不支持模型优先,推荐使用代码优先,遗留系统可以使用ScafffoldDbContext来生成代码实现类似DBFirst的效果,但是推荐用Code First
2、EF会对实体上的标注做校验,EF Core追求轻量化,不校验。
3、熟悉EF的话,掌握EFCore会很容易,很多用法都移植过来了,EF Core又增加了很多新东西 4、EF中一些类的命名空间以及一些方法的名字再EF Core中稍有不同。
5、EF不再做新特性增加
搭建EF Core环境
用什么数据库
1、EF Core是对于底层ADO.NET Core的封装,因此ADO.NET Core支持的数据库不一定被EF Core支持
2、EF Core支持所有主流的数据库,包括MS SQL Server、Oracle、MySql、PostgreSql、Sqlite等。可以自己实现Provider支持其他数据库。国产数据库支持问题
3、对于SQLServer支持最完美,MySql、PostgreSQL也不错(有能解决的小坑)。这三者是.NET圈中用的最多的三个。EF Core能尽量屏蔽底层数据库差异
开发环境搭建
1、经典步骤:建实体类;建DbCotext;生成数据库;编写调用EF Core的业务代码
2、Boos.cs
public class Book
{
public long Id { get; set; }//主键
public string Title { get; set; }//标题
public DateTime PubTime { get; set; }//发布日期
public double Price { get; set; }//单价
}
3、Install-Package Microsoft.EntityFrameworkCore.SqlServer
4、创建实现了IEntityTypeConfiguration接口的实体配置类,配置实体类和数据库的对应关系
class BookEntityConfig : IEntityTypeConfiguration<Book>
{
public void Configure(EntityTypeBuilder<Book> builder)
{
builder.ToTable("T_Books");
}
}
5、创建继承自DbContext的类
class TestDbContext:DbContext
{
public DbSet<Book> Books { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connStr = "Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true";
optionsBuilder.UseSqlServer(connStr);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
6、migration数据库迁移 面向对象的开发中,数据库不是程序员手动创建的,而是由Migration工具生成的。关系数据库只是存放模型数据的一个媒介而已,理想状态下,程序员不用关心数据库的操作。根据对象的定义变化,自动更新数据库的表以及表结构的操作,叫做Migration(迁移)。迁移可以分为多步(项目进化),也可以回滚。
7、为了使用生成数据库的工具,Nuget安装:Microsoft.EntityFrameworkCore.Tool,否则执行Add-Migration等命令会报错
8、再”程序包管理控制台“中执行如下命令Add-Migration InitialCreate,会自动再项目的Migration文件夹中生成操作数据库的C#操作。代码需要执行后才会应用对数据库的操作。”程序包管理器控制台“中执行Update-database。查看一下数据库,表建好了
9、修改表结构
1)项目开发中,根据需要,可能会在已有实体中修改、新增、删除表、列等
2)想要限制Title的最大长度为50,Title字段设置为”不可为空“,并且想增加一个不可为空且最大长度为20的AuthorName(作者名字)属性,首先子啊Book实体类中增加一个AuthorName属性
3)修改BookEntityConfig
builder.ToTable("T_Books");
builder.Property(e => e.Title).HasMaxLength(50).IsRequired();
builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();