网站首页 > 开源技术 正文
概述
如今.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文件中注册一些服务,比如数据库上下文MyDbContext,Carter等等,示例代码如下:
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数据表:
如果本文对你有帮助,请点赞、评论、转发,您的支持是我不断创作的最大动力,感谢!
猜你喜欢
- 2024-11-12 开源云盘利器:Nextcloud 21私有云盘搭建
- 2024-11-12 三步完成测试监控系统搭建(监控摄像机测试方案)
- 2024-11-12 移动开发工具Xamarin.Android更新至6.1.2
- 2024-11-12 分享一款PG管理工具--pgadmin,一个类似PLSQL功能的工具
- 2024-11-12 关于Android系统框架的核心组成部分,你知道多少?
- 2024-11-12 「asp.net core 系列」8实战之利用EF Core 实现数据操作层
- 2024-11-12 Clace和sqlite-fs:使用SQLite作为文件系统替代方案
- 2024-11-12 从失败到成功:如何在C#中删除SQLite数据库文件
- 2024-11-12 在 C# 中,保存和读取应用程序的默认值(或设置)的多种方法
- 2024-11-12 NetCore使用Sqlite数据库入门基础
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)