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. PHP获取网页返回的JSON数据并在微信换行展示

    1 $url ="http://japi.juhe.cn/joke/content/text.from?page=&pagesize=&key=c968d04ab0ea15e ...

  2. distinct()去重

    distinct()去重 Student.objects.all().distinct()

  3. 浅谈 OI 中各种合并操作

    前言 合并操作一直是 OI 中一大考点,今天请各位跟着笔者来梳理一下各种合并操作. 启发式合并 几乎可以说是最经典的合并了. 假定我们可以在 \(O(k)\) 的时间内往某个集合中插入一个数,那么我们 ...

  4. 向量数据库Pinecone,治疗ChatGPT幻觉的药方?

    大白话了解新鲜事,今天讲讲以Pinecone为代表的向量数据库.向量数据库Pinecone一夜爆火,4月27日B轮拿到了1亿美元的融资,估值达到7.5亿美元,一个2021年刚刚推出的数据库产品,火爆背 ...

  5. GitHub上SSH keys和Deploy keys的区别

    平时安装一个git然后去GitHub进行SSH keys 配置最后就开始使用,然后换一台电脑再使用$ ssh-keygen -t rsa -C "your email"生成一个ss ...

  6. 近期SQL优化实战分享

    分享一下本周SQL优化的两个场景. 如果能对读者有一定的启发,共同探讨,不胜荣幸. 版本信息:mysql,5.7.19 引擎: innodb 场景1 我们有一张常口表,里面的数据由各种数据源合并而来, ...

  7. Python基础 - 解释性语言和编译性语言

    什么是机器语言 计算机是不能理解高级语言,当然也就不能直接执行高级语言了.计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序.   如何把我们写的代码 ...

  8. 记录一些不知道哪里冒出来的 idea(可能已存在)

    2022/7/4 给定一张 \(n\) 个点的有权无向图和 \(m\) 个关键点,求其生成树满足每个点到离它最近的关键点的距离之和最小. 输出该生成树边权和. 加强一下: 给出一个 \(N\) 个点 ...

  9. Galaxy Project | 一些尝试与思考

    很久都没有更新推文了,脑壳羞涩,快码不出字的节奏! 最近在尝试内部 Galaxy 一些新工具的开发和 Galaxy 核心版本的升级测试,发现一些问题,简单记录和聊一下吧. 一些尝试 对于在线的 web ...

  10. Android Studio 引入kotlin 协程

    首先保证创建了kotlin项目,然后,两个步骤: 1. 加入dependency,在 build.gradle(:app)中,加入 implementation 'org.jetbrains.kotl ...