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 来完成 ...
随机推荐
- EasyEarth三维可视化解决方案——智慧园区
智慧园区 智慧园区围绕“园区行为数据化”和“园区数据可视化”的核心理念,依托EasyEarth三维可视化基础地理信息云平台,综合运用云计算.物联网.自动化控制.现代通讯.图像识别.软硬件集成等技术,借 ...
- 【BIEE】报表导出数据只显示500行,如何解决?
BIEE报表展示的时候每页只显示500行,进而导致导出的时候也只能导出500行,客户抱怨:每次只能导出500行,导出后还得自己合并! 解决思路: 1.找到路径$BIEE_HOME\instances\ ...
- OpenFOAM——同心环中的自然对流
本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL009: Natural Convection in a Concentric A ...
- MyBatis中的配置错误creating bean with name 'sqlSessionFactory'
错误信息如下: 警告: Exception encountered during context initialization - cancelling refresh attempt: org.sp ...
- 数据分析之--log文件自动化分析
https://mp.weixin.qq.com/s?__biz=MjM5NjE2MTIyMw==&mid=2257483803&idx=1&sn=efe24b040397cd ...
- CentOS7 安装特定版本的Docker
先卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-late ...
- iOS - 点击UIButton不变灰,button的image不变灰
要想让uibutton点击不变灰 初始化的时候就不能 UIButton *button = [[UIButton alloc]init]; 初始化的时候酱紫,可以保证button点击时不变灰 UIBu ...
- base64方式显示控件
data:,文本数据 data:text/plain,文本数据 data:text/html,HTML代码 data:text/html;base64,base64编码的HTML代码 data:tex ...
- [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间
Design a data structure that supports all following operations in average O(1) time. insert(val): In ...
- KMP操作大全与kuangbin kmp套题题解
先搬运,比赛后整理 https://blog.csdn.net/vaeloverforever/article/details/82024957