connectionstrings:ASP.Net Core5.0 EF Core使用记录

 2021-06-30 5:45    77  

打算把之前开源的 基于ASP.Net Core开发一套通用后台框架 重新用ASP.Net Core 5写一遍connectionstrings,也算是巩固一下旧知识,学习下新知识。本文是项目搭建初期关于 EF Core 的使用记录

connectionstrings:ASP.Net Core5.0 EF Core使用记录

1connectionstrings、项目结构

connectionstrings:ASP.Net Core5.0 EF Core使用记录

2、添加引用LY.Admin.Model项目添加Microsoft.EntityFrameworkCore的NuGet引用,因为我们如果 实体属性 需要使用数据批注方式而不是使用Fluent API的话是需要用到的connectionstrings。LY.Admin.Repositories项目添加Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools、Pomelo.EntityFrameworkCore.MySql的NuGet引用以及LY.Admin.Model的项目引用。LY.Admin.Web项目添加Microsoft.EntityFrameworkCore.Design、Pomelo.EntityFrameworkCore.MySql的NuGet引用以及LY.Admin.Repositories的项目引用。

connectionstrings:ASP.Net Core5.0 EF Core使用记录

3、创建Model实体属性有数据批注和Fluent API两种,我们这里两种混合使用,实际项目中只需要一种就可以了。

Entity#我们所有表基本都是有通用字段的,那么把这些通用字段放到一个父类中更好处理。

Copy public class Entity { /// <summary> /// Id /// </summary> [Key] [Column("id")] [Comment("主键Id")] public int Id { get; set; } /// <summary> /// 删除标识 /// </summary> [Column("delete_flag")] [Comment("删除标识")] public int DeleteFlag { get; set; } /// <summary> /// 创建人 /// </summary> [Column("created_by")] [Comment("创建人")] public int CreatedBy { get; set; } /// <summary> /// 创建时间 /// </summary> [Column("created_time")] [Comment("创建时间")] public DateTime CreatedTime { get; set; } /// <summary> /// 更新人 /// </summary> [Column("update_by")] [Comment("更新人")] public int? UpdatedBy { get; set; } /// <summary> /// 更新时间 /// </summary> [Column("update_time")] [Comment("更新时间")] public DateTime? UpdatedTime { get; set; } }4、Post(演示表)#Author字段我们使用Fluent API

Copy[Table("tb_post")]public class Post : Entity{ /// <summary> /// 标题 /// </summary> [Column("title")] [Comment("标题")] public string Title { get; set; } /// <summary> /// 内容 /// </summary> [Column("body")] [Comment("内容")] public string Body { get; set; } /// <summary> /// 作者 这里使用 Fluent API 方式去控制 具体见 LY.Admin.Repositories.Database.EntityConfigurations.PostConfiguration /// </summary> public string Author { get; set; }}5、创建DbContext如果使用Fluent API是需要在OnModelCreating进行设置的代码如下

DbContext#Copypublic class LYAdminDbContext:DbContext{ /// <summary> /// 构造函数 调用父类构造函数 /// </summary> /// <param name="options"></param> public LYAdminDbContext(DbContextOptions<LYAdminDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); #region 实体属性 // 参考 ://docs.microsoft.com/zh-cn/ef/core/modeling/entity-properties // 可以使用 数据批注 或者 Fluent API modelBuilder.ApplyConfiguration(new PostConfiguration()); #endregion } public DbSet<Post> Posts { get; set; }}PostConfiguration#这里是每个实体类都单独写的,更多API查看实体属性

Copy/// <summary>/// 实体属性/// 参考 ://docs.microsoft.com/zh-cn/ef/core/modeling/entity-properties/// 可以使用 数据批注 或者 Fluent API/// </summary>public class PostConfiguration : IEntityTypeConfiguration<Post>{ public void Configure(EntityTypeBuilder<Post> builder) { builder.Property(x => x.Author).HasMaxLength(50).HasColumnType("varchar(50)").HasColumnName("author").HasComment("作者"); }}6、LY.Admin.Web修改Startup#Copypublic void ConfigureServices(IServiceCollection services){ services.AddControllersWithViews(); services.AddDbContext<LYAdminDbContext>(options => { var connectionString = this.Configuration["ConnectionStrings:MySqlConn"]; //这里现在需要指定版本,暂时设置为自动检测 options.UseMySql(connectionString,ServerVersion.AutoDetect(connectionString)); });}appsettings.json配置连接字符串#Copy{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "ConnectionStrings": { "MySqlConn": "Server=127.0.0.1;Port=3306;Database=lyadmin;Uid=root;Pwd=123456;charset=utf8;Allow User Variables=True" }}7、数据迁移打开工具->NuGet包管理器->程序包管理器控制台,默认项目选择LY.Admin.Repositories。输入命令Add-Migration Init。不出意外可以看到上述项目下自动生成了Migrations文件夹和代码。

如果此时我们觉得又有新的修改,可以直接删除当前迁移文件Remove-Migration。修改完成后重新添加,然后执行Update-DataBase,就可以在数据库中看到结果了。

注意:__EFMigrationsHistory是记录我们迁移记录的,所以Migrations文件夹和代码不可以手动删除!

后续如果有新的修改,那我们直接Add-Migration XXX(说明),比如Add-Migration AddComment,然后同样执行Update-DataBase就可以了。

笔记#如果想把所有的迁移文件全都删除,重新操作。应该怎么做呢?首先执行命令:Update-Database -Migration:0然后执行命令:Remove-Migration,等所有的迁移文件都删除后,重新Add-Migration、Update-DataBase就可以了。

初始化数据因为我们使用Code Firsst的方式,是需要在程序一开始运行的时候初始化数据库的,那么,如何初始化?将在后续文章中说明,是需要修改Program.cs文件的,然后加上日志处理。等写完日志处理的时候再补充。

原文地址::///jellydong/p/14837397.html

本文标签:使用记录

原文链接:https://www.xgfox.com/alpx/109.html

本文版权:如无特别标注,本站文章均为原创。