EF Core的学习之路01

本文介绍了ORM框架EF Core的基本概念和与其他ORM的比较,强调了EF Core在.NET开发中的重要性。内容涵盖EF Core与EF的区别、环境搭建、增删改查操作、实体配置、主键策略、数据库迁移以及一对多关系配置。通过实例展示了如何使用EF Core进行数据库交互,包括创建、查询、修改和删除操作。同时,探讨了在不同数据库系统中使用EF Core的注意事项和SQL语句的生成。
摘要由CSDN通过智能技术生成

本文章是我听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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值