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

1、项目结构

2、添加引用

LY.Admin.Model项目添加Microsoft.EntityFrameworkCore的NuGet引用,因为我们如果 实体属性 需要使用数据批注方式而不是使用Fluent API的话是需要用到的。

LY.Admin.Repositories项目添加Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.DesignMicrosoft.EntityFrameworkCore.ToolsPomelo.EntityFrameworkCore.MySql的NuGet引用以及LY.Admin.Model的项目引用。

LY.Admin.Web项目添加Microsoft.EntityFrameworkCore.DesignPomelo.EntityFrameworkCore.MySql的NuGet引用以及LY.Admin.Repositories的项目引用。

3、创建Model

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

Entity

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

   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

[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

public 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 实体属性
// 参考 https://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查看实体属性

/// <summary>
/// 实体属性
/// 参考 https://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

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(); services.AddDbContext<LYAdminDbContext>(options =>
{
var connectionString = this.Configuration["ConnectionStrings:MySqlConn"];
//这里现在需要指定版本,暂时设置为自动检测
options.UseMySql(connectionString,ServerVersion.AutoDetect(connectionString));
});
}

appsettings.json配置连接字符串

{
"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文件的,然后加上日志处理。等写完日志处理的时候再补充。

最新文章

  1. JAVA自已设计JSON解析器
  2. (基础篇)PHP字符串操作
  3. linux的nohup disown setsid screen
  4. 【算法】数组与矩阵问题——找到无序数组中最小的k个数
  5. MongoDB学习笔记04
  6. Windows Phone开发(28):隔离存储B
  7. 来一手 AOP 注解方式进行日志记录
  8. 最耗性能的SQL语句
  9. vsftpd安装和使用 Linux系统和window系统
  10. [java面试]宇信易诚 广州分公司 java笔试题目回忆录
  11. Oracle的问题的解决
  12. idea调试代码跟踪到tomcat代码里面
  13. Note | Git
  14. container(容器),injection(注入)
  15. pandas Dataframe 取某行
  16. (转)eclipse上传项目到码云
  17. C语言专题-基本数据类和占位符
  18. 数据恢复软件extundelete介绍
  19. windows下rabbitmq(架构师必备神器)集群搭建
  20. 【BZOJ3879】SvT 后缀数组+单调栈

热门文章

  1. (十一)VMware Harbor 配置管理
  2. 002-Java的标识符和关键字
  3. OOP-面向对象(二)
  4. AdaBoostClassifier参数
  5. (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )
  6. 08. linux下 mv find grep命令
  7. 从苏宁电器到卡巴斯基第15篇:我在苏宁电器当营业员 VII
  8. 基于三层交换机的VRRP技术--MSTP、VRRP的综合运用
  9. POJ3498最大流,枚举终点,企鹅,基础最大流
  10. 绕过网站WAF(图片绕过)