一、什么是EFcore
需要引用的包
二、Core First
步骤
在models文件夹中添加实体类和context数据库上下文实现DbContext接口,并且创建构造函数
public class ShopContext : DbContext { private readonly IConfiguration _configuration; public ShopContext(DbContextOptions<ShopContext> options,IConfiguration configuration) : base(options) { _configuration = configuration; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); //以下两种方式都是正确的 //optionsBuilder.UseSqlServer(_configuration.GetConnectionString("ShopContext")); optionsBuilder.UseSqlServer("server=.;database=ShopDB;uid=sa;password=123456"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { //添加种子数据 //modelBuilder.Entity<Student>().HasData( // new Student {ID=1, Name="小向" } // ); //添加种子数据 modelBuilder.Seed();//这个seed方法为ModelBuilder扩展方法,这样做的话可以使我们更好的管理数据。 } public virtual DbSet<Product> Products { get; set; } public virtual DbSet<Cate> Cates { get; set; } }
新建一个ModelBuilderExtensions类放扩展类方法
以上两步完成后在工具=====》nuget包管理器的控制台管理中
输入命令创建迁移文件:(当更变了字段和修改的一些初始化信息,那么就要重新执行下面两个命令)
(1)Add-Migration 迁移文件名称(自己起一个名称)例如:Add-Migration initmigration
(2)Update-Database :更新数据库
注意以后实体类更改了字段,也可以通过迁移命令更改数据库。
三、DB First
步骤
1.最后在appsettings.json中添加连接字符串,写法如下:
//这个不能变
"ConnectionStrings": {
//名称自己起的
"ShopContext": "Data Source=.;Initial Catalog=数据库名称;User ID=sa;Password=123456"
}
2. 直接在工具=====》nuget包管理器的控制台管理中输入以下命令
使用sa登录方式:
Scaffold-DbContext "Data Source=.;Initial Catalog=数据库名称;User ID=sa;Password=123456"
Microsoft.EntityFrameworkCore.SqlServer -OutPutDir Models -Context ShopContext
使用windows登录方式:
Scaffold-DbContext "Data Source=.;Initial Catalog=数据库名称;Integrated Security=True"
Microsoft.EntityFrameworkCore.SqlServer -OutPutDir Models -Context ShopContext
四、数据库连接字符串
五、其他
1.当需要删除一个表字段时,但该字段已经运用到数据库中,那删除时,需要执行updata-database(删除的迁移数据的前一个迁移数据名称【名称为_后面的名称】)进行数据的回滚,可以使用自动生成的_EFMigrationsHistory(用于跟踪应用于数据库的迁移记录信息)表对应相应的迁移数据进行回滚和删除操作。
2.如果创建的是一个空的项目,创建控制器和视图时需要自己创建一个Controllers文件夹用于放控制器,创建view放对应的视图文件,创建完毕之后,需要去startup的configure方法中设置路由。如图:
3.core first 主外键写法(引用using System.ComponentModel.DataAnnotations;来做相应的约束)
主键(外键添加之后,须在主键表中添加一个导航属性)
外键