安装nugut包
Microsoft.EntityFrameworkCore.SqlServer
连接对应数据库的package,本次是连接sqlserver数据库
Microsoft.EntityFrameworkCore.Tools
用于实体与数据库的相互映射
CodeFirst(基础版)
新建上下文类(继承于DbContext)
1.生成空构造函数
此处我们一般用不到,但是必须写
/// <summary>
/// 必须要有空构造函数,不然不能执行
/// </summary>
public EFCoreDemoContext()
{
}
2.生成构造函数并执行父类构造函数
此处即将应用程序的配置信息传递给DbContext(通过泛型),对DbContextOptions进行实例化
/// <summary>
/// 使用构造函数,并执行父类构造
/// </summary>
/// <param name="options"></param>
public EFCoreDemoContext(DbContextOptions<EFCoreDemoContext> options):base(options)
{
}
3.对需要使用的每个实体添加DbSet<TEntity>属性(TEntity为泛型)
使用DbSet<Student>属性,Students来查询和保存类文件Student的实例
当对DbSet采用LINQ查询的时候,会自动转换为SQL语句对基础数据库做查询操作
4.绑定数据库连接
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer("server=127.0.0.1;Database=TestDatabase;uid=sa;password=sa");
5.值得注意的是,这里有一个非常常用的方法OnModelCreating,有兴趣的可以查一下
/// <summary>
/// 此处可以更新展示的表名
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
依赖注入
将写好的上下文文件依赖注入到IservicesCollection中
services.AddScoped<EFCoreDemoContext>();
新增映射
Microsoft.EntityFrameworkCore.Tools安装的效果便在此处展现
程序包管理控制台
1.add-migration 添加迁移 只会会提示新增的迁移文件夹名称
执行该指令后,会在项目文件夹下新增Migration文件夹
2.update-database 更新本地模型代码到数据库
异常:
没有将对应项目设定会起始项目,右键对应项目选“设定为起始项目”即可
这里提示的是,你写的数据库连接字符串有问题,检查一下
DBFirst
程序包管理控制台
Scaffold-DbContext "{Your DB connect string}" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
作用是生成数据库Mapping,我的就是Scaffold-DbContext “Data Source=127.0.0.1;Database=TestDatabase;uid=sa;password=sa” Microsoft.EntityFrameworkCore.Sqlserver -outputdir Enitites
- {Your DB connect string}:你的数据库连接字符串
- Microsoft.EntityFrameworkCore.SqlServer:目标数据库为Sql Server
- -OutputDir Models: 生成的文件的存放目录,目前目录是根目录下的Models目录
还有其他参数
- -Context 指定DbContext生成类的名称
- -Tables 指定要为其生成类的表
- -Force强制脚手架覆盖现有文件 ,否则只在没有输出的文件没有覆盖的情况下,代码才会继续
升级版
在使用Dbfirst的时候,我们会发现一个warning
此处就是在提示,生成的context类文件中的数据库连接写在了代码上,这是一个隐藏的危险。所以一般会将数据库连接语句写在appseeting.json文件中
此处继续Codefirst的操作,将数据库连接语句迁移到json文件
上下文类
1.移除空构造函数
也就是把空构造函数舍弃
2.移除OnConfiguring(此处配置数据库连接)
数据库连接池的配置
1.appsettings.json文件配置
"ConnectionStrings": {
"StudentDBConection": "server=(local)\\MSSQLLocalDB;database:StudentDB,Trusted_Connection=true"
需要注意的是,此处ConnectionStrings不能写错
2.注入中间件(ConfigureService)
将原来的services.AddScoped();替换为DbContextPool注入
//services.AddScoped<EFCoreDemoContext>();
services.AddDbContextPool<EFCoreDemoContext>(options =>
{
options.UseSqlServer(_configuration.GetConnectionString("StudentDBConection"));
});
注意,此处如果使用_configuration进行获取配置文件信息,需要在Startup.cs新增一个构造函数
using Microsoft.Extensions.Configuration;
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
此处,即成功将配置文件放入到json文件中