编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

.NET 6 Minimal API程序中使用EF Core访问SQLite数据库实例教程

wxchong 2024-11-12 13:22:58 开源技术 129 ℃ 0 评论

概述

如今.NET 6发布已经有一段时间了,在生产环境运行的基于.NET 6的项目也趋于稳定,没有任何问题。

在.NET 6发布之前,我已向大家分享了关于《创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性》。

在正式生产环境中,也使用了.NET 6的Minimal API来开发微服务,无论是从编码速度还是运行效率上来说,表现都很不错。

今天,就为大家分享一下在.NET 6 Minimal API应用程序中,如何使用Entity Framework Core(EF Core)连接并操作SQLite数据库。

准备工作

本教程.NET 6示例程序需做如下准备工作:

开发工具

Visual Studio 2022 (或者VS Code,Rider 2021.3)

数据库管理工具

Navicat(或DataGrip)

创建原语数据表的脚本

CREATE TABLE "da_user" (
  "Id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  "FirstName" TEXT(30),
  "LastName" text(30),
  "CreatedAt" text(20)
);

插入示例数据:

INSERT INTO da_user (FirstName,LastName,CreatedAt)VALUES('Rector','Liu',DATETIME('now'));
INSERT INTO da_user (FirstName,LastName,CreatedAt)VALUES('James','Peter',DATETIME('now'));

创建项目

本教程以Visual Studio创建项目为例。

打开Visual Studio的起始窗口,选择ASP.NET Core Web API项目模板,如下图:

配置新项目窗口中,分别配置如下信息:

1:项目名称
2:项目存储的磁盘路径
3:解决方案名称

其他信息窗口中,配置如下信息:

框架:选择.NET 6.0
身份验证类型:选择无
配置HTTPS:不勾选
启用Docker:不勾选
使用控制器(取消选中以使用最小API):不勾选
启用OpenAPI支持:勾选

确认配置后,单击创建按钮,Visual Studio将为我们创建一个.NET 6 Minimal Web API项目。

安装NuGet程序包

本教程,基于.NET 6 Minimal Web API使用EF Core操作SQLite数据库需要使用到如下的NuGet程序包:

  • Microsoft.EntityFrameworkCore.Sqlite
  • Carter

在Visual Studio中,打开NuGet程序包管理器,分别安装这两个NuGet程序包,如下:

创建项目文件夹

在项目中分别创建如下的目录:

  • DataAccess:存放数据访问有关的代码文件
  • Db:存放SQLite数据库文件
  • Models:存放实体模型
  • Modules:存放不同模块的接口文件

编写示例代码

创建实体模型

Models文件夹中创建User.cs文件,用于映射数据表da_user,代码如下:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Demo1.Models
{
    [Table("da_user")]
    public class User
    {
        [Key]
        public int Id { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime CreatedAt { get; set; }
    }
}

创建数据库上下文

DataAccess文件夹中创建MyDbContext.cs文件,用于配置数据库访问上下文,代码如下:

using Demo1.Models;
using Microsoft.EntityFrameworkCore;

namespace Demo1.DataAccess
{
    public class MyDbContext : DbContext
    {
        private readonly IConfiguration _configuration;
        private readonly IHostEnvironment _host;
        public MyDbContext(IConfiguration configuration, IHostEnvironment host)
        {
            _configuration = configuration;
            _host = host;
        }

        /// <summary>
        /// User
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //var folder = _host.ContentRootPath;
            var folder = Directory.GetCurrentDirectory();
            var dbPath = Path.Combine(folder, "Db", "Datum.db");
            optionsBuilder.UseSqlite(#34;Data Source = {dbPath}");
            base.OnConfiguring(optionsBuilder);
        }

        public DbSet<User> Users { get; set; }
    }
}

创建服务接口模块

Modules文件夹中创建UserModule.cs文件,用于模块化组织接口服务,代码如下:

using Carter;
using Demo1.DataAccess;

namespace Demo1.Modules
{
    public class UserModule : ICarterModule
    {
        public void AddRoutes(IEndpointRouteBuilder app)
        {
            app.MapGet("/user/list", (MyDbContext db, HttpResponse res) =>
            {
                var users = db.Users.ToList();
                return Results.Json(users);
            });
        }
    }
}

注:本教程使用到了Carter这个库,具体使用请参考《Carter--模块化组织和管理.NET 6 Minimal API应用程序接口服务的利器!!!》。

配置Program.cs文件

最后,我们需要在Program.cs文件中注册一些服务,比如数据库上下文MyDbContextCarter等等,示例代码如下:

using Carter;
using Demo1.DataAccess;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<MyDbContext>();
builder.Services.AddCarter();

var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.MapCarter();
app.Run();

运行查看效果

至此,我们的示例程序就写好了,运行项目。在浏览器打开项目地址(比如我的:http://localhost:5197/swagger/index.html),可看到如下的Swagger界面,说明运行成功:

向SQLite数据表写入数据

接下来,我们演示如下使用EF Core向SQLite数据表中写入数据。

打开UserModule.cs文件,在其中添加创建用户的路由映射及方法,如下:

using Carter;
using Demo1.DataAccess;
using Demo1.Models;

namespace Demo1.Modules
{
    public class UserModule : ICarterModule
    {
        public void AddRoutes(IEndpointRouteBuilder app)
        {
            app.MapGet("/user/list", (MyDbContext db, HttpResponse res) =>
            {
                var users = db.Users.ToList();
                return Results.Json(users);
            });

            app.MapGet("/user/create", (MyDbContext db, HttpResponse res) =>
            {
                var user = new User
                {
                    FirstName = "Stephen",
                    LastName = "Curry",
                    CreatedAt = DateTime.Now
                };
                db.Users.Add(user);
                var i = db.SaveChanges();
                Console.WriteLine(i > 0 ? "用户创建成功" : "用户创建失败");
                var users = db.Users.ToList();
                return Results.Json(users);
            });
        }
    }
}

重新运行项目,访问地址:http://localhost:5197/user/create

如果得到如下的结果,表示数据成功被写入到SQLite数据表:

如果本文对你有帮助,请点赞、评论、转发,您的支持是我不断创作的最大动力,感谢!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表