ASP.NET Core 入门教程三 结合 EFCore 和 SQLite

ASP.NET Core 是一个开源的 Web 框架,它允许开发者轻松地构建现代、高性能的 Web 应用程序。Entity Framework Core (EFCore) 是一个轻量级、可扩展的 ORM(对象关系映射)框架,它支持多种数据库。SQLite 是一个轻量级的嵌入式数据库,适用于小型应用程序。在本篇文章中,我们将学习如何在 ASP.NET Core 项目中结合 EFCore 和 SQLite。

1. 创建一个新的 ASP.NET Core Web API 项目

首先,我们需要创建一个新的 ASP.NET Core Web API 项目。在 Visual Studio 中,选择 "创建新项目",然后选择 "ASP.NET Core Web 应用程序"。在 "选择模板" 对话框中,选择 ".NET Core" 和 "API" 模板。为项目命名并单击 "创建"。

2. 安装 EFCore 和 SQLite 相关包

在项目中,我们需要安装 EFCore 和 SQLite 相关的 NuGet 包。右键单击项目名称,选择 "管理 NuGet 程序包",然后搜索并安装以下包:

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Sqlite
  • Microsoft.EntityFrameworkCore.Tools

3. 创建实体类和数据库上下文

接下来,我们需要创建一个实体类和一个继承自 DbContext 的数据库上下文类。

复制代码
cs 复制代码
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Filename=./products.db");
    }
}

在上面的代码中,我们创建了一个 Product 实体类和一个 AppDbContext 数据库上下文类。DbSet<Product> 表示 Product 实体将在数据库中映射为一个表。OnConfiguring 方法用于配置数据库连接字符串。

4. 迁移数据库

在 EFCore 中,我们可以使用迁移来创建和更新数据库结构。首先,我们需要创建一个迁移。在 Visual Studio 的 "包管理器控制台" 中,输入以下命令:

复制代码
复制代码
Add-Migration InitialCreate

这将创建一个名为 "InitialCreate" 的迁移。接下来,我们需要应用这个迁移来创建数据库:

复制代码
复制代码
Update-Database

现在,数据库和 Products 表已经创建好了。

5. 实现 CRUD 操作

最后,我们将在控制器中实现基本的 CRUD 操作。

复制代码
cs 复制代码
using Microsoft.AspNetCore.Mvc;
using System.Linq;

namespace YourProjectName.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class ProductsController : ControllerBase
    {
        private readonly AppDbContext _context;

        public ProductsController(AppDbContext context)
        {
            _context = context;
        }

        [HttpGet]
        public IActionResult GetProducts()
        {
            return _context.Products.ToList();
        }

        [HttpGet("{id}")]
        public IActionResult GetProduct(int id)
        {
            var product = _context.Products.Find(id);
            if (product == null)
            {
                return NotFound();
            }
            return product;
        }

        [HttpPost]
        public IActionResult CreateProduct([FromBody] Product product)
        {
            _context.Products.Add(product);
            _context.SaveChanges();
            return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
        }

        [HttpPut("{id}")]
        public IActionResult UpdateProduct(int id, [FromBody] Product productDetails)
        {
            var product = _context.Products.Find(id);
            if (product == null)
            {
                return NotFound();
.
相关推荐
方圆想当图灵9 分钟前
ScheduledFutureTask 踩坑实录
后端
全栈凯哥23 分钟前
16.Spring Boot 国际化完全指南
java·spring boot·后端
M1A129 分钟前
Java集合框架深度解析:LinkedList vs ArrayList 的对决
java·后端
31535669131 小时前
Springboot实现一个接口加密
后端
Linn3 小时前
Spring WebSocket 服务实现的主流方案与最佳实践
spring boot·后端·spring
M1A14 小时前
企业信息化管理(EIM):数字化转型的核心引擎
后端
我是老孙4 小时前
Spring Boot 应用中,配置的加载优先级
spring boot·后端·pycharm
风象南4 小时前
基于 SpringBoot 的 REST API 与 RPC 调用的统一封装
java·spring boot·后端
陈随易5 小时前
Kimi k2不行?一个小技巧,大幅提高一次成型的概率
前端·后端·程序员
Victor3565 小时前
MySQL(133)如何解决MySQL连接超时问题?
后端