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. sh: vue-cli-service: command not found

    mac环境下运行vue项目报错sh: vue-cli-service: command not found 解决方法:cd到项目目录下,执行命令sudo rm -rf node_modules pac ...

  2. 2022-07-16:以下go语言代码输出什么?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0 0 0]。 package main import ( “fmt“ )

    2022-07-16:以下go语言代码输出什么?A:[]:B:[5]:C:[5 0 0 0 0]:D:[0 0 0 0 0]. package main import ( "fmt" ...

  3. 2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子。 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。 如果剩余橘子数 n 能被

    2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子. 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子. 如果剩余橘子数 n 能被 ...

  4. aggregate和annotate⽅法

    现在来看下⼏组实际使⽤案例.使⽤前别忘了import Avg, Max, Min或者Sum⽅法哦from django.db.models import Avg, Max, Min计算学⽣平均年龄, ...

  5. .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移

    前言 接上期文章<.NET6项目连接数据库方式方法>,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类.数据库.把ORM框架和数据迁移都写进去. 安装ORM框架,这里我们采用E ...

  6. 如何将jq动画做出高帧的感觉?(丝滑顺畅)

    前言 我最近在一点一点研究我 博客园 的前端代码,算是边敲边学吧,还算是挺有意思的. 是这样的,之前见过一个效果,就是先显示博客的背景,然后博客主界面缓缓的上升到正确位置,于是乎,干他!开撸代码! 各 ...

  7. MySQL-DQL

    准备测试表,先跟着执行下面的SQL #1.登录MySQL后 #2.创建test_database数据库,不存在则创建 create database if not exists test_databa ...

  8. Blazor HyBrid 授权讲解

    Blazor HyBrid 授权讲解 本文介绍 ASP.NET Core 对 Blazor Hybrid 应用中的安全配置和管理及 ASP.NET Core Identity 的支持. Blazor ...

  9. 如何在.net6webapi中配置Jwt实现鉴权验证

    JWT(Json Web Token) jwt是一种用于身份验证的开放标准,他可以在网络之间传递信息,jwt由三部分组成:头部,载荷,签名.头部包含了令牌的类型和加密算法,载荷包含了用户的信息,签名则 ...

  10. 驱动开发:内核封装WFP防火墙入门

    WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案,其默认被设计为分层结构,该框架分别提供了用户态与内核态相同的AIP函数,在两种模式下均可以开发防火墙产品,以下代码我实现了一个简单 ...