打算把之前开源的 基于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文件的,然后加上日志处理。等写完日志处理的时候再补充。

ASP.Net Core5.0 EF Core使用记录的更多相关文章

  1. ABP CORE 框架入门视频教程《电话薄》基于 Asp.NET Core2.0 EF Core

    ABP框架简介 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行 ...

  2. ASP.NET core1.0 EF MYSQL搭建中碰到几个问题记录

    1.No executable found matching command "dotnet-ef"   看了网上各种办法都没用,最后选择"个人用户账户"创建项 ...

  3. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(1)

    本系列的的角色权限管理主要采用Dotnet MVC4工程内置的权限管理模块Simplemembership实现,主要有关文件是InitializeSimpleMembershipAttribute.c ...

  4. ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(7)

    今天将使用Simplemembership进行权限控制 我们使用mvc的AuthorizeAttribute来实现对Controller and Action权限控制 看如下标为红色的代码片段: // ...

  5. ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(6)

    快过年了,公司事情忙,好几天没有继续写博客,今天开始写账户模块系统登录,账户管理以及登录日志, 首先新建登录日志数据表: USE [MVCSystem] GO /****** Object: Tabl ...

  6. ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(5)

    我参考了bui官网,里面提供了大量的接口案例和效果,之前下载的前端框架完全不需要bootstrap,所以从这一节开始,不再使用bootstrap(当然不想改变的也可以继续使用之前的框架,不影响使用), ...

  7. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(4)

    接下来就是菜单管理了,菜单分为两部分,一部分是菜单管理,另一部分是左边的树形菜单 数据库添加菜单表Menus USE [MVCSystem] GO /****** Object: Table [dbo ...

  8. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(3)

    接下来完成用户.角色的增删查改,以及用户角色.权限的设置 对用户表.角色表做了一些扩展如下[可以更加自己需要增减字段] 相应的M_UserProfile.cs.M_Roles.cs进行扩展 using ...

  9. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(2)

    创建公共分页参数类Common/GridPager.cs using System; using System.Collections.Generic; using System.Linq; usin ...

随机推荐

  1. Ambassador-08-跨域

    官方文档:https://www.getambassador.io/docs/latest/topics/using/cors/ Cross-Origin Resource Sharing-CORS ...

  2. 如何在 NET 程序万种死法中有效的生成 Dump (下)

    一:背景 上一篇我们聊到了如何通过 procdump 抓取 cpu爆高 和 内存暴涨 两种情况,这一篇再聊聊如何去抓程序 挂死 和 意外退出. 二:程序挂死 1. 定义 程序挂死 简单的说就是程序没有 ...

  3. 如何解压从UK biobank下载下来的tsv.bgz文件?

    今天碰到一个问题,就是从UK biobank下载下来的gwas result file是filename.tsv.bgz格式.这东西需要解压才能阅历,可是用zip或者rar都是搞不定,网上搜了一圈,说 ...

  4. Day05_25_Super关键字

    Super关键字 Super关键字的所用 Super关键字的用法有三种: 在子类的成员方法中,访问父类的成员变量. 在子类的成员方法中,访问父类的成员方法. 在子类的构造方法中,访问父类的构造方法. ...

  5. CPF 入门教程 - 控件布局(六)

    CPF netcore跨平台桌面UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF 入门教程 - 绘图(四) C ...

  6. Mysql - 使用入门

    本文是学习 Mysql必知必会 后的笔记 学习之前需要创建一个数据库,然后导入下面两个mysql脚本 create database db1 charset utf8; ############### ...

  7. JDK8新特性(一) Lambda表达式及相关特性

    函数式接口 函数式接口是1.8中的新特性,他不属于新语法,更像是一种规范 面向对象接口复习 在这里先回顾一下面向对象的接口,创建接口的关键字为interface,这里创建一个日志接口: public ...

  8. Selenium3自动化测试【16】元素定位之Tag

    @ 目录 1. 通过tag name定位Bing案例 2. 通过tag name定位一组元素案例 3.[测试全系列视频课程]请点击我哦..... tag name方法是通过对HTML页面中tag na ...

  9. DVWA之Reflected XSS(反射型XSS)

    目录 Low Medium High Impossible Low 源代码: <?php header ("X-XSS-Protection: 0"); // Is ther ...

  10. 还在一个模块打天下嘛?你知道引入Jetpack架构后,你的App会发生哪些奇妙的变化吗?

    前言 上篇文章我给大家分享了我对Android架构的理解,从思想层面去讲述架构的演进过程.很多小伙伴读完后拍手叫好,表示还想听我讲一下对Jetpack 架构的看法,本着帮人帮到底的精神,今天我将再次动 ...