asp.net core EF code first
以连接mysql数据库为例
一 安装组件
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore.Tools
MySqlConnector
Pomelo.EntityFrameworkCore.MySql
二 新增MySQLDbContext,继承自DbContext,并新增一个数据库表实体Article
[Table("Articles")]
public class Article
{
/// <summary>
/// 主键id
/// </summary>
[Key]
public string Id { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 内容
/// </summary>
[MaxLength(255)]
public string Content { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedDT { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime ModifiedDT { get; set; }
}
public class MySQLDbContext : DbContext
{
public MySQLDbContext(DbContextOptions<MySQLDbContext> options) : base(options) { }
public DbSet<Article> ArticleSets { get; set; }
//...
}
三 appsettings配置数据库连接字符串,并在Startup.cs中添加服务

Startup.cs:
services.AddDbContext<MySQLDbContext>(options => options.UseMySql(Configuration.GetConnectionString("MySQL")));
注:字符串连接名称"MySQL"与appsettings中配置的名称对应.
四 code first方式创建数据库
1.程序包管理控制台PM命令
remove-migrations
add-migrations my-gration
update-database
2.donet命令行
dotnet ef migrations remove
dotnet ef migrations add my-gration
dotnet ef database update
3.代码内执行创建数据库的代码(EnsureCreated)
新增DbContextExtension扩展类EnsureCreatedDB扩展方法:
public static IWebHost EnsureCreatedDB<TContext>(this IWebHost host) where TContext : DbContext
{
using (var scope = host.Services.CreateScope())
{
var context = scope.ServiceProvider.GetService<TContext>();
context.Database.EnsureCreated();
}
return host;
}
在Program.cs中调用该扩展方法:
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build()
.EnsureCreatedDB<MySQLDbContext>() //调用扩展方法
.Run();
}
五 使用EF进行增删改查
[ApiController]
[Route("api-hd/article")]
public class ArticleController : ControllerBase
{
private MySQLDbContext _dbContext; public ArticleController(MySQLDbContext dbContext)
{
_dbContext = dbContext;
} /// <summary>
/// 新增文章
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPost]
[Route("")]
public async Task<bool> Add(string title, string content)
{
var newArticle = new Article()
{
Id = Guid.NewGuid().ToString(),
Title = title,
Content = content,
CreatedDT = DateTime.Now,
ModifiedDT = DateTime.Now,
};
await _dbContext.AddAsync(newArticle);
await _dbContext.SaveChangesAsync();
return true;
} /// <summary>
/// 根据id查询文章
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet]
[Route("{id}")]
public async Task<Article> GetById(string id)
{
var data = await _dbContext.ArticleSets.FindAsync(id);
return data;
} /// <summary>
/// 更新文章标题
/// </summary>
/// <param name="id"></param>
/// <param name="title"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPut]
[Route("")]
public async Task<bool> Update(string id, string title)
{
var existArticle = await _dbContext.ArticleSets.FindAsync(id);
if (existArticle == null)
{
return false;
} existArticle.Title = title;
//_dbContext.Update(existArticle);
await _dbContext.SaveChangesAsync();
return true;
} /// <summary>
/// 根据id删除文章
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpDelete]
[Route("{id}")]
public async Task<bool> Delete(string id)
{
var existArticle = await _dbContext.ArticleSets.FindAsync(id);
if (existArticle == null)
{
return false;
} _dbContext.Remove(existArticle);
await _dbContext.SaveChangesAsync();
return true;
} }
asp.net core EF code first的更多相关文章
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- asp.net core+ef core
asp.net core+ef core 官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一 ...
- ASP.Net Core的Code Fist代码先行操作方法
Asp.Net core的Code Fist(代码先行)主要有以下几步: 1.创建实体类 2.创建数据库上下文 3.填加连接字符串 4.依赖注入 5.添加基架工具并执行初始迁移 6搭建模型的基本架构 ...
- Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)
Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本) 原创 2016年07月22日 10:33:51 23125 6月随着.NET COR ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- ASP.NET Core&EF 笔记
首先创建Asp.net Core项目,然后通过 NuGet 安装 EntityFrameworkCore: Microsoft.EntityFrameworkCore.SqlServer Micros ...
- (17)ASP.NET Core EF基于数据模型创建数据库
1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...
- ASp.net Core EF ActionFilterAttribute AOP
在项目中经常遇到一些数据的修改,很多时候业务方需要一个修改日志记录,这里我们计划用mssql数据库来存放日志记录,用EF来操作,记录日志可以用mvc的ActionFilterAttribute 来完成 ...
随机推荐
- 平安银行Java面试-社招-五面(2019/09)
个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...
- Shiro安全框架案例
基于Shiro的用户认证(不包含授权) Spring整合Shiro shiro原理 1.1 搭建环境 1.1.1 web模块 pom.xml <dependency> < ...
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- [Beta]第一次 Scrum Meeting
[Beta]第一次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/5 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况总 ...
- MacOS安装rJava
rJava出了名的难装,一大堆问题. 核心的问题: 1. java版本问题,最好用1.8版本的java 2. 编译器的问题 3. 相关头文件header的问题 之前几次装过,但都放弃了,这次花了一下午 ...
- 解决vs2010按ctrl+f5,调试窗口一闪而过的方法
vs2010调试按F5与按Ctrl+F5有什么区别 Ctrl F5测试运行后不自动推出控制台,直接按F5会自动退出去 解决vs2010按ctrl+f5,调试窗口一闪而过的方法 http://hi.ba ...
- PostgreSQL中的表连接操作
- 004 vue组件
一:创建组件 1.第一种创建方式 主要有Vue.extend,Vue.component. 注释掉的代码是一步一步的推断,后面的代码是简化的代码. <!DOCTYPE html> < ...
- [图片问答]LODOP字体设置方法
字体设置方法:一.整体设置(针对文本项),打印初始化后.增加打印项之前调用本函数LODOP.SET_PRINT_STYLE("FontSize",11);二.单个打印项(针对文本项 ...
- 安装 gearman
准备:php 对应gearman插件包 https://pecl.php.net/package/gearman 1. 先安装依赖库 [root@VM_27_0_centos /]# yum inst ...