EF Core(Entity Framework Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库。它是Entity Framework的下一代版本,专为.NET Core应用程序而设计。
EF Core提供了一种简单、灵活和高效的方式来与各种数据库进行交互,它通过将数据库表映射为.NET对象,并提供了一组强大的查询语言和操作API,使开发人员能够以面向对象的方式进行数据库操作。
本文是一个简单的EF Core教程,演示了如何使用EF Core进行数据库操作。

1. 安装EF Core

首先,创建一个WebApi项目,我们需要安装EF Core。可以通过NuGet包管理器或使用dotnet命令行工具来安装EF Core。

dotnet add package Microsoft.EntityFrameworkCore

2. 定义模型类

在使用EF Core之前,我们需要定义一个或多个模型类,这些类将映射到数据库表。

namespace LearnEfCore.Entities
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}

上述代码定义了一个名为"Product"的模型类,表示一个产品对象。该类包含了Id、Name和Price属性,分别对应数据库表中的列。

3. 创建数据库上下文

接下来,我们需要创建一个派生自DbContext的数据库上下文类,用于定义数据库的连接和数据集。
这里我们需要使用什么数据库就需要对应安装该数据库的数据库提供程序。如SQLServer,Mysql,SQLite等等。这里为了方便,就用SQLite。

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
using LearnEfCore.Entities;
using Microsoft.EntityFrameworkCore; namespace LearnEfCore
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<Product> Products { get; set; }
}
}

我们通过定义DbSet<Product>属性来表示数据库中的"Products"表。
接下来需要配置注入DbContext。

using LearnEfCore;
using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlite("Data Source=./LearnEfCore.db"));

这里UseSqlite指定了数据库连接字符串。

4. 进行数据库迁移

在使用EF Core之前,我们需要进行数据库迁移。迁移是将模型类映射到数据库表的过程。
这里需要注意的是,生成迁移文件需要安装Microsoft.EntityFrameworkCore.Design的包。

dotnet add package Microsoft.EntityFrameworkCore.Design

首先,打开命令行工具,并导航到项目的根目录。然后运行以下命令来创建一个新的迁移:

dotnet ef migrations add InitialCreate

上述命令将创建一个名为"InitialCreate"的迁移,它将根据模型类创建数据库表。

接下来,运行以下命令来应用迁移并创建数据库:

dotnet ef database update

上述命令将应用迁移并创建数据库。如果数据库已经存在,它将更新数据库以反映最新的模型更改。

使用连接工具查看Sqllite中的表。


__EFMigrationsHistory中记录是我们执行数据库迁移的记录。

Products表结构也对应我们的实体类的属性。

5. 进行数据库操作

现在,我们可以使用EF Core进行数据库操作。以下是一些常见的操作示例:
新建一个WebApi Controller,注入AppDbContext。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; namespace LearnEfCore.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly AppDbContext _appDbContext; public ProductController(AppDbContext appDbContext)
{
_appDbContext = appDbContext;
}
}
}

添加新产品

[HttpPost]
public async Task<IActionResult> Add(Product product)
{
_appDbContext.Products.Add(product);
var res = await _appDbContext.SaveChangesAsync();
return Ok(res);
}

上述代码创建了一个新的产品对象,并将其添加到数据库中。



成功插入数据。

查询产品列表

[HttpGet]
public async Task<IActionResult> List()
{
var list = await _appDbContext.Products.ToListAsync();
return Ok(list);
}

上述代码查询了所有产品。

数据正确响应。

更新产品

[HttpPut]
public async Task<IActionResult> Update(Product input)
{
var product = await _appDbContext.Products.FirstOrDefaultAsync(p=>p.Id == input.Id);
if(product != null)
{
product.Price = input.Price;
product.Name = input.Name;
await _appDbContext.SaveChangesAsync();
}
return Ok(product);
}

上述代码查找Id为1的产品,并更新其价格和名称。


查看数据库可以发现修改成功。

删除产品

[HttpDelete]
public async Task<IActionResult> Delete(int id)
{
var product = await _appDbContext.Products.FirstOrDefaultAsync(p=>p.Id == id);
if(product != null)
{
_appDbContext.Products.Remove(product);
await _appDbContext.SaveChangesAsync();
}
return Ok();
}

上述代码查找Id为1的产品,并将其从数据库中删除。


查看数据库可以看到数据已经被删除。

总结

EF Core是一个功能强大且易于使用的ORM框架,它提供了一种简单的方式来进行数据库操作。通过定义模型类和数据库上下文,以及使用提供的API,开发人员可以轻松地进行各种数据库操作。无论是创建新的数据库还是与现有数据库进行交互,EF Core都是一个强大的选择。希望这个教程对你有所帮助!

欢迎进群催更。

asp.net core之EfCore的更多相关文章

  1. asp.net core 与EFcore 入门

    什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...

  2. Angualr+asp.net core webapi+efcore系列

    想着学习一门前端框架,WTF,看了又看,卧槽对于.Net程序员来说,还有什么比面向对象更香的呢,所以果断的选择了Angular.正好看各路大神以及官方文档想学习一下asp.net core,那就搞起吧 ...

  3. Asp.Net Core Identity+EFCore + Mysql踩坑记录

    搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...

  4. Asp.net Core使用EFCore+Linq进行操作

    注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考写的比较细致耐性一点看完会有收获的 首先加上必要的引用 using Microsoft.EntityFramework ...

  5. Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库

    前言     在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...

  6. asp.net core 系列 19 EFCore介绍

    一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2.EF Core 的计划与 .NET Core以及 ASP.NET Core 版本同步.EF Core 是一个 .NE ...

  7. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  8. asp.net core 系列之webapi集成EFCore的简单操作教程

    因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...

  9. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 Entity Framework Core Nuget包管理 如果你创建项目的时候启用了个人身份验证的话,项目中就已经包含了EFCo ...

  10. ASP.NET Core MVC之ViewComponents(视图组件)

    前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...

随机推荐

  1. "树形List"与"扁平List"互转(Java实现)

    背景:在平时的开发中,我们时常会遇到下列场景 公司的组织架构的数据存储与展示 文件夹层级的数据存储与展示 评论系统中,父评论与诸多子评论的数据存储与展示 ...... 对于这种有层级的结构化数据,就像 ...

  2. 2022-09-06:以下go语言代码输出什么?A:Hi All;B:Hi go All;C:Hi;D:go All。 package main import “fmt“ func app() f

    2022-09-06:以下go语言代码输出什么?A:Hi All:B:Hi go All:C:Hi:D:go All. package main import "fmt" func ...

  3. 2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返回false。 来自字节飞书团队。

    2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串. 如果是,返回true: 否则,返回false. 来自字节飞书团队. 答案 ...

  4. vue全家桶进阶之路40:Vue3父件传值给子件

    在Vue3中,可以通过props将父组件的数据传递给子组件.具体步骤如下: 在父组件中定义要传递给子组件的数据,可以是data属性中的数据或者是计算属性computed中的数据. 在子组件中通过pro ...

  5. CANoe_系统变量的创建过程

    在Canoe中创建系统变量,可以用于定义和管理与CAN网络通信相关的参数和配置.遵循以下步骤: 1.打开Canoe 启动Canoe软件. 2.打开项目 在Canoe的菜单栏中,选择"File ...

  6. 使用yaml进行数据驱动

    一.需求描述 1.请求登陆接口,从登陆接口的响应头数据中获取token值,并写入yml文件: 2.读取写入yml文件中的token值作为下个接口的传参,请求查询物料列表接口,查看查询结果. yaml_ ...

  7. Rust的类型系统

    Rust的类型系统 类型于20世纪50年代被FORTRAN语言引入,其相关的理论和应用已经发展得非常成熟.现在,类型系统已经成为了各大编程语言的核心基础. 通用基础 所谓类型,就是对表示信息的值进行的 ...

  8. JavaScript 显示数据

    JavaScript 显示数据 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() 弹出警告框. 使用 document.write() 方法将内容写到 HTML ...

  9. Java 使用ArrayList获取10个1-20之间的随机数,要求不能重复

    代码如下: public static void main(String[] args) { List<Integer> nums = new ArrayList<Integer&g ...

  10. .NETCore项目在Windows下构建Docker镜像并本地导出分发到CentOS系统下

    在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便. Docker Desktop介绍及安装 Docker Desktop是适用于Mac.Linux或Windo ...