asp.net core之EfCore
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的更多相关文章
- asp.net core 与EFcore 入门
什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...
- Angualr+asp.net core webapi+efcore系列
想着学习一门前端框架,WTF,看了又看,卧槽对于.Net程序员来说,还有什么比面向对象更香的呢,所以果断的选择了Angular.正好看各路大神以及官方文档想学习一下asp.net core,那就搞起吧 ...
- Asp.Net Core Identity+EFCore + Mysql踩坑记录
搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...
- Asp.net Core使用EFCore+Linq进行操作
注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考写的比较细致耐性一点看完会有收获的 首先加上必要的引用 using Microsoft.EntityFramework ...
- Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
前言 在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...
- asp.net core 系列 19 EFCore介绍
一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2.EF Core 的计划与 .NET Core以及 ASP.NET Core 版本同步.EF Core 是一个 .NE ...
- 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...
- asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 Entity Framework Core Nuget包管理 如果你创建项目的时候启用了个人身份验证的话,项目中就已经包含了EFCo ...
- ASP.NET Core MVC之ViewComponents(视图组件)
前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...
随机推荐
- SQLlabs less1-10通关笔记
SQLlabs 通关笔记 mysql数据结构 在练习靶场前我们需要了解以下mysql数据库结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有 ...
- rust语言写的贪吃蛇游戏
首先新建工程,然后用vscode打开,命令如下: cargo new snake --bin 文件结构如下: Cargo.Toml文件内容如下: [package] name = "snak ...
- requests标头在json序列化时报错TypeError: Object of type CaseInsensitiveDict is not JSON serializable
requests的作者似乎为了解决header里大小写兼容的问题,而创建了大小写不敏感的数据结构CaseInsensitiveDict,requests返回的响应标头即是一个CaseInsensiti ...
- js通过className删除元素
有时候难免需要使用js进行 dom 操作:如在删除地图feature时同时得清除提示框 这个就需要使用 .parentNode.removeChild(元素) let chArr = document ...
- Python 包安装和 postgresql 的一些问题
今天安装 hgvs 这个 python 包的时候,遇到几个比较有代表性的问题,记录分享一下. hgvs is a Python package to parse, format, validate, ...
- allure的安装与配置
一.安装配置JDK 说明:以win10系统为例 1.Oracle官网下载JDK:https://www.oracle.com/java/technologies/downloads/ 请下载安装JDK ...
- 传统软件如何SaaS化改造,10个问答带你掌握最优解
摘要:如果您所在企业希望实行SaaS化改造,可访问了解华为云开发者技术团队的SaaS支持计划. 本文分享自华为云社区<[云享问答]第1期:传统软件如何SaaS化改造,10个问答带你掌握最优解!& ...
- 体验昇腾Ascend C 编程语言极简易用的算子开发
摘要:昇腾Ascend C编程语言,让基于昇腾AI的算法创新更加简单. 本文分享自华为云社区<CANN黑科技解密|昇腾Ascend C编程语言 - 极简易用的算子开发体验>,作者:昇腾CA ...
- java后端接入微信小程序登录功能
前言 此文章是Java后端接入微信登录功能,由于项目需要,舍弃了解密用户信息的session_key,只保留openid用于检索用户信息 后端框架:spring boot 小程序框架:uniapp 流 ...
- 记一次 .NET 某埋线管理系统 崩溃分析
一:背景 1. 讲故事 经常有朋友跟我反馈,说看你的文章就像看天书一样,有没有一些简单入手的dump 让我们先找找感觉,哈哈,今天就给大家带来一篇入门级的案例,这里的入门是从 WinDbg 的角度来阐 ...