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

2、添加引用
LY.Admin.Model项目添加Microsoft.EntityFrameworkCore的NuGet引用,因为我们如果 实体属性 需要使用数据批注方式而不是使用Fluent API的话是需要用到的。
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的项目引用。
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使用记录的更多相关文章
- ABP CORE 框架入门视频教程《电话薄》基于 Asp.NET Core2.0 EF Core
ABP框架简介 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行 ...
- ASP.NET core1.0 EF MYSQL搭建中碰到几个问题记录
1.No executable found matching command "dotnet-ef" 看了网上各种办法都没用,最后选择"个人用户账户"创建项 ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(1)
本系列的的角色权限管理主要采用Dotnet MVC4工程内置的权限管理模块Simplemembership实现,主要有关文件是InitializeSimpleMembershipAttribute.c ...
- ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(7)
今天将使用Simplemembership进行权限控制 我们使用mvc的AuthorizeAttribute来实现对Controller and Action权限控制 看如下标为红色的代码片段: // ...
- ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(6)
快过年了,公司事情忙,好几天没有继续写博客,今天开始写账户模块系统登录,账户管理以及登录日志, 首先新建登录日志数据表: USE [MVCSystem] GO /****** Object: Tabl ...
- ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(5)
我参考了bui官网,里面提供了大量的接口案例和效果,之前下载的前端框架完全不需要bootstrap,所以从这一节开始,不再使用bootstrap(当然不想改变的也可以继续使用之前的框架,不影响使用), ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(4)
接下来就是菜单管理了,菜单分为两部分,一部分是菜单管理,另一部分是左边的树形菜单 数据库添加菜单表Menus USE [MVCSystem] GO /****** Object: Table [dbo ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(3)
接下来完成用户.角色的增删查改,以及用户角色.权限的设置 对用户表.角色表做了一些扩展如下[可以更加自己需要增减字段] 相应的M_UserProfile.cs.M_Roles.cs进行扩展 using ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(2)
创建公共分页参数类Common/GridPager.cs using System; using System.Collections.Generic; using System.Linq; usin ...
随机推荐
- 阿里巴巴面试-Java后端-社招5面技术总结(Offer已拿)
最近接到阿里妈妈的面试通知,历经一个月,虽然过程挺坎坷,但总算是拿到了offer.这里简单记录下面试所遇问题,仅供各位大佬参考. 由于前面两面的时间过去的有点久了,只能根据记忆大概写些记得问题. 部门 ...
- Day06_32_Java各种内部类
内部类 内部类都有哪些? 成员内部类 匿名内部类 静态内部类 局部内部类 成员内部类 - 成员内部类内部不能有静态声明(静态方法和静态变量) - 成员内部类可以访问外部类中所有的数据包括静态数据和实例 ...
- Day05_18_类和对象的含义与关系
Java 类和对象 类的含义? 类属于引用数据类型,java语言中所有的.class都属于引用数据类型, 在类体当中,方法体之外定义的变量被称为 成员变量,成员变量若没有赋值,系统会默认赋值为0: 先 ...
- 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀
前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...
- hdu4845 状态压缩BFS
题意: 给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路: ...
- Aircrack-ng破解无线WIFI密码
首先,如果kali是装在虚拟机里面的话,是不能用物理机的无线网卡的.所以,如果我们要想进行无线破解,需要外接一个无线网卡设备,并且该设备要支持 monitor 监听模式 iwconfig :系统配置无 ...
- Windows PE 重定位表编程(枚举重定位地址)
原理之前单独总结过,在这里: http://blog.csdn.net/u013761036/article/details/54051347 下面是枚举重定位信息的代码: // ReLocation ...
- 票据传递攻击(Pass the Ticket,PtT)
目录 黄金票据 生成票据并导入 查看票据 验证是否成功 黄金票据和白银票据的不同 票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金 ...
- svchost服务(DLL服务)
相比于exe服务,DLL服务只需要一个dll,而且运行是通过svchost.exe来运行的,同时安装和卸载的时候需要自己手动修改相关注册表.原理及其细节就不多说了,直接上代码吧(我写的这个是创建新组然 ...
- CTFHub-easy_search
easy_search 玩了好些天,今天做道题找找状态,明天开始肝了 打开是一个登录框 用amdin/admin尝试了一下,提示登陆失败 这里肯定不会是暴力破解,我猜是sql注入,试了万能密码or 1 ...