以连接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的更多相关文章

  1. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  2. asp.net core+ef core

    asp.net core+ef core 官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一 ...

  3. ASP.Net Core的Code Fist代码先行操作方法

    Asp.Net  core的Code Fist(代码先行)主要有以下几步: 1.创建实体类 2.创建数据库上下文 3.填加连接字符串 4.依赖注入 5.添加基架工具并执行初始迁移 6搭建模型的基本架构 ...

  4. Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)

    Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本) 原创 2016年07月22日 10:33:51 23125 6月随着.NET COR ...

  5. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  6. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  7. ASP.NET Core&EF 笔记

    首先创建Asp.net Core项目,然后通过 NuGet 安装 EntityFrameworkCore: Microsoft.EntityFrameworkCore.SqlServer Micros ...

  8. (17)ASP.NET Core EF基于数据模型创建数据库

    1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...

  9. ASp.net Core EF ActionFilterAttribute AOP

    在项目中经常遇到一些数据的修改,很多时候业务方需要一个修改日志记录,这里我们计划用mssql数据库来存放日志记录,用EF来操作,记录日志可以用mvc的ActionFilterAttribute 来完成 ...

随机推荐

  1. vue中父级与子组件生命周期的先后顺序

    1.vue的生命周期 2.views/createrCustormer.vue为父级     <template>     <expressService />   </ ...

  2. element ui 怎么去修改el-date-picker的时间

    <el-date-picker v-model="formSearch.timeRange" type="daterange" placeholder=& ...

  3. Jquery创建动态表单

    $(document).ready(function(){ $("#button1").click(function(){ //获取html <body></bo ...

  4. NFV实验平台

    NFV架构如下图所示. NFVI对应于数据平面,数据平面转发数据并提供用于运行网络服务的资源. MANO对应于控制平面,该控制平面负责构建各种VNF之间的连接以及编排NFVI中的资源. VNF层对应于 ...

  5. mysql查询列定义,是否自增等

    SELECT ORDINAL_POSITION AS Colorder, Column_Name AS ColumnName, data_type AS TypeName, COLUMN_COMMEN ...

  6. Ingress-nginx 部署使用

    Ingress-nginx 部署使用   一.Ingress 简介 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内 ...

  7. 在asp.net core中使用NLog

    第一步:nuget  引入  NLog.Web.AspNetCore 4.5+ 第二步:放入nlog.config <?xml version="1.0" encoding= ...

  8. mongo 笔记

    mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options ...

  9. Python分词工具——jieba

    jieba简介 python在数据挖掘领域的使用越来越广泛.想要使用python做文本分析,分词是必不可少的一个环节在python的第三方包里,jieba应该算得上是分词领域的佼佼者. GitHub地 ...

  10. MD5(3)

    import java.io.UnsupportedEncodingException; import java.security.PrivateKey; import java.security.S ...