程序集依赖:Nuget:Microsoft.EntityFrameworkCoreTools
【定义配置文件】
定义上下文配置文件,继承DbContext类
public class InfoManageProDbContext : DbContext{/// <summary>/// 业务系统/// </summary>public DbSet<BusinessSystem> BusinessSystems { get; set; }/// <summary>/// 指定使用数据库/// </summary>/// <param name="optionsBuilder"></param>protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);string connectionString = "Server=***;Database=InfoManageProDb;User Id=sa;Password=***;TrustServerCertificate=true;";optionsBuilder.UseSqlServer(connectionString);}/// <summary>/// 指定使用哪些配置文件/// </summary>/// <param name="modelBuilder"></param>protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);//自动加载当前程序集,继承IEntityTypeConfiguration接口的配置modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);}
}
表配置有两种方式,DataAnnotation和FluentAPI ,DataAnnotation是直接在表属性上加标签,FluentAPI需要借助配置文件,如下图:
public class EFConfig_BusinessModule : IEntityTypeConfiguration<BusinessModule>{public void Configure(EntityTypeBuilder<BusinessModule> builder){//这种配置写法叫 FluentAPI builder.Property(x => x.Code).HasMaxLength(50).IsRequired();}}
【启动迁移、更新数据库】
Add-Migration InitialCreate 增加迁移
Update-Database 更新数据库
如果有多个数据库上下文需要指定
Add-Migration UpdateComment -Context xxxxDbContext
Update-Database UpdateComment -Context xxxxDbContext //执行最新一次迁移到命令
【反向迁移】
如果旧系统或者已经有了表,EF Code First就无法实用,就需要反向工程。
在命令行中执行 Scaffold-Dbcontext "数据库连接字符串"
执行后自动生成实体类
---------------------------------------------------------------------------------------------------------------------------------
【主、子表关系创建】
EF Core可在配置文件中配置一对一、一对多关系,即外键关系
使用HasOne、WithOne、HasMany、WithMany等方式在FluentAPI形式的配置文件中在申明主表或子表关系。
插入数据时,子表数据放入主表的关联的集合,保存主表时,子表自动被保存。
【主、子表关系查询】
//主表查询带出子表数据
Article a =db.Articles.Include(x=>x.Conments).FirstOrDefault(x=>x.Id==5);Conment c =db.Conments.Include(x=>x.Article).FirstOrDefault(x=>x.Id==3);
HasForeignKey申明外键