EF Core速成

EFCore是一个ORM工具,推荐使用代码优先的映射方式。它有约定和配置两种映射机制。约定是根据C#实体类自动映射,而配置则允许自定义映射规则,如FluentAPI。通过建立DbContext和配置实体,可以实现数据库操作,并使用迁移命令来管理数据库结构的变化。
摘要由CSDN通过智能技术生成

EF Core介绍:

 EF Core 是一个ORM映射程序

2.EF Core提供的映射方式

1.1 把数据库模型映射成实体类  俗称:数据库优先(EF Core官方不推荐使用  更推荐使用代码优先 ,以前在EF中叫数据库优先,但现在在EF Core中官方成为反向工程)

    优点:老项目已经有数据库的时候可直接用,直接生成实体类 很爽

    缺点:初用很爽,越用越恶心,每次更新都得重新生成覆盖全部实体类,搞不好就GG

1.2把用C#代码建立的实体类直接映射成数据库  俗称:代码优先    (EF Core 官方推荐使用)

   优点:效率高  方便  快捷   让开发人员不用过度关注数据库变化,可以把更多时间放在程序开发设计上

缺点:相比数据库优先,可能前期配置实体的时候可能会有点麻烦但是配置上限更高更灵活(算不上一个真正的缺点)

2.EF Core运行机制理解

上面说了EF Core是一个ORM映射程序    所以他是怎么映射的呢?

EF Core映射配置会有两种方式

2.1.约定  (EF Core内部自己规定的映射机制)

比如说EF Core会根据你写的C#实体类按照EF Core内部约定来进行映射

汽车实体类:

 public class Car
    {
        public int CarId { get; set; }

        public string  CarName { get; set; }

        public double CarPrice { get; set; }

        public int CarBrand { get; set; }

    }

映射后

 

Car因为是int类型而且字段名中包含Id字眼所以映射到数据库就会成为  主键自增且名称为CarId的字段

CarName 是string类型所以就会被映射成名称为CarName类型为nvarchar类型的字段

CarPrices是Double类型所以会被映射成名称为CarPrice类型为float的字段

2.2.配置(顾名思义就是让EF Core按照我们配置方式去映射数据库)

自定义配置又两种方式:

1.使用 fluent API 配置模型

 public class CarConfiguration : IEntityTypeConfiguration<Car>
    {
        public void Configure(EntityTypeBuilder<Car> builder)
        {
             builder.ToTable("CarTB").HasKey(t => t.CarId);
            builder.Property(x=>x.CarName).HasMaxLength(50).IsRequired();
            builder.Property(x=>x.CarBrand).HasMaxLength(50).IsRequired();
        }
    }

建立一个继承IEntityTypeConfiguration<Car>的模型配置类CarConfiguration

实现Configure方法

builder.ToTable("CarTB").HasKey(t => t.CarId); //把Car类型映射成表表名为:CarTB,HasKey(t => t.CarId)//主键是CarId。

builder.Property(x=>x.CarName).HasMaxLength(50).IsRequired();//映射到数据库的CarTB表中的CarName字段长度为50,.IsRequired()不可以为空

没有配置的字段EF Core会按照约定的方式来映射

3.建立并配置数据库类进行使用

建立一个继承DbContext的类

并重写OnConfiguring方法和OnModelCreating方法

public class MyDbcontext:Microsoft.EntityFrameworkCore.DbContext
    {
        public DbSet<Car> Cars { get; set; }
        //数据库配置
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            optionsBuilder.UseSqlServer("数据库链接字符串");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            //配置实体
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }

解读这个类

可以把MyDbcontext类看作你的数据库 public DbSet<Car> Cars { get; set; }看作数据库中的表

OnConfiguring方法中的optionsBuilder.UseSqlServer()代表使用的那个数据库

OnModelCreating方法:读取实体的配置 

modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly):获取当前程序集中继承IEntityTypeConfiguration类型的配置类来进行实体映射

进行映射:

在程序包管理控制台中输入迁移命令

Add-Migration  迁移名称

执行完成后会生成一个迁移文件夹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值