Blazor项目中使用EF读写 SQLite 数据库

news/2024/12/25 10:39:35/

《信管通低代码信息管理系统应用平台》开发环境就是Blazor,其中的数据库访问就是使用SQLite数据库。SQLite 是一种轻量级的嵌入式数据库,具有以下优点:


1. 轻量级

  • 小巧易用:SQLite 只需要一个动态库或单个文件,库的大小通常不到 1 MB。
  • 无需安装:SQLite 是嵌入式数据库,直接集成到应用程序中,无需额外安装或运行服务。

2. 单文件存储

  • 简单管理:所有的数据、表结构、索引等信息都存储在一个单一的 .db 文件中,便于备份、传输和管理。
  • 跨平台兼容:SQLite 数据库文件可以在不同操作系统之间无缝迁移。

3. 高性能

  • 快速:在处理中小型数据量时,SQLite 的性能通常优于客户端-服务器模式的数据库
  • 嵌入式优化:SQLite 是为嵌入式设备设计的,能够高效运行在资源受限的环境中。

4. 易于使用

  • 无需配置:不需要配置复杂的数据库服务器或客户端连接,直接使用数据库文件。
  • SQL 支持:支持标准的 SQL 查询语句,易于学习和使用。

5. 开源和免费

  • 零成本:SQLite 是开源软件,遵循 Public Domain 许可,无需任何费用即可商用。
  • 广泛支持:有大量的社区支持和丰富的文档资源。

6. 事务支持

  • ACID 合规:支持事务并保证原子性、一致性、隔离性和持久性,数据安全性强。
  • 并发访问:支持多个读取操作和单个写入操作,适合大多数场景。

7. 跨平台

  • 支持多种语言:SQLite 提供多种编程语言的绑定接口(如 C、C#、Python、Java 等)。
  • 支持多种系统:运行于 Windows、Linux、macOS 和嵌入式系统等平台。

8. 适合嵌入式和小型项目

  • 嵌入式设备:在 IoT 设备、手机、嵌入式系统中广泛使用。
  • 小型应用:适用于单用户或小型项目,不需要复杂的数据库管理。

9. 文件系统友好

  • 与文件操作兼容:SQLite 使用普通文件存储数据,可以很好地融入基于文件系统的应用程序设计。
  • 容易与版本控制集成:可以将数据库文件直接纳入版本控制系统(如 Git)。

sqlite适用许多场景,如:嵌入式设备或移动应用(如 Android 使用 SQLite);小型网站或个人项目;快速原型开发和数据分析或临时数据存储等。

Blazor项目中使用Entity Framework (EF) Core读写SQLite数据库需要以下几个步骤:


1. 添加必要的依赖

在你的 Blazor 项目的 .csproj 文件中,添加以下包引用:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite 
dotnet add package Microsoft.EntityFrameworkCore.Design 

2. 创建数据库上下文

定义一个继承自 DbContext 的类,用于表示 SQLite 数据库的上下文。

using Microsoft.EntityFrameworkCore; public class AppDbContext : DbContext 
{ public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } // 定义你的数据表 public DbSet<TodoItem> TodoItems { get; set; } 
}public class TodoItem 
{ public int Id { get; set; } public string Title { get; set; } public bool IsCompleted { get; set; } 
} 

3. 配置服务容器

Program.cs 文件中,配置依赖注入和数据库连接。

using Microsoft.EntityFrameworkCore; 
using Microsoft.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(args); // 配置 SQLite 数据库 
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlite("Data Source=app.db")); // 添加其他服务 
builder.Services.AddRazorComponents(); 
builder.Services.AddServerSideBlazor(); 
var app = builder.Build(); // 创建数据库 
using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService<AppDbContext>(); db.Database.EnsureCreated(); // 自动创建数据库,如果不存在 } 
app.MapBlazorHub(); 
app.MapFallbackToPage("/_Host"); 
app.Run(); 

4. 在组件中使用数据库上下文

在 Blazor 组件中,使用依赖注入获取 AppDbContext 并进行数据库操作。

@inject AppDbContext DbContext <h3>Todo List</h3> 
<ul> @foreach (var item in TodoItems) { <li>@item.Title (@(item.IsCompleted ? "Done" : "Pending"))</li> } 
</ul> 
<input @bind="NewTodo" placeholder="Enter a new todo" /> 
<button @onclick="AddTodo">Add</button> @code 
{ private List<TodoItem> TodoItems = new(); private string NewTodo; protected override async Task OnInitializedAsync() { // 加载数据 TodoItems = await DbContext.TodoItems.ToListAsync(); } private async Task AddTodo() { if (!string.IsNullOrWhiteSpace(NewTodo)) { var todo = new TodoItem { Title = NewTodo, IsCompleted = false }; DbContext.TodoItems.Add(todo); await DbContext.SaveChangesAsync(); TodoItems.Add(todo); NewTodo = string.Empty; } }  
} 

5. 运行项目并测试

  1. 运行你的 Blazor 项目,确保浏览器能访问到。
  2. SQLite 数据库文件 (app.db) 会自动生成在项目的运行目录。
  3. 通过组件界面添加或修改数据,观察效果。

注意事项

  1. 如果是 Blazor Server 项目,EF Core 的 DbContext 生命周期建议使用 Scoped 模式(默认配置)。
  2. 如果是 Blazor WebAssembly 项目,EF Core 与 SQLite 的支持需要通过 WebAssembly 支持的库如 sqlite-wasm,这可能需要额外配置。
  3. 对于大型项目,可以考虑使用迁移 (dotnet ef migrations add InitialCreate) 管理数据库结构。

《信管通低代码信息管理系统应用平台》是针对规模较小的桌面应用,它使用Blazor通过EF Core对sqlite进行数据管理,提高了开发效率,更方便开发好的应用发布和部署。


http://www.ppmy.cn/news/1557965.html

相关文章

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比 目录 VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比; 2.单变量时间序列预测 就是先vmd把变…

Golang框架实战-KisFlow流式计算框架(9)-Cache/Params 数据缓存与数据参数

Golang框架实战-KisFlow流式计算框架专栏 Golang框架实战-KisFlow流式计算框架(1)-概述 Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上) Golang框架实战-KisFlow流式计算框架(3)-项目构建/基础模块-(下) Golang框架实战-KisFlow流式计算框架(4)-数据流 Golang框…

高德地图自定义折线矢量图形

实现的功能&#xff1a;通过点标记连接生成线 实现折线适量图形 进一步实现功能&#xff1a;1.对指定点进行拖拽 2.从多个点中删除指定点 // 初始化地图map.value new AMap.Map(g-container, {resizeEnable: true,center: [longitude, latitude],layers: [// 卫星new AMap.T…

用套接字的UDP,TCP知道什么是HTTP吗?

文章目录 UDP和TCP七层网络架构Omnipeek抓包分析举例图片备注code参考code HTTP协议的构成 UDP和TCP UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09; 和 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09; 是…

springboot483基于springboot的校园失物招领系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园失物招领系统信息管理难度大&#xff0c;容错率低&am…

MCU 功耗基准测试

电池供电设备的开发人员通常面临着提供高水平的功能和性能&#xff0c;同时限度地延长电池寿命的挑战。水流量计和燃气流量计、医疗监控设备和远程传感器等应用通常需要单块电池的电池寿命长达数月甚至数年。在某些情况下&#xff0c;开发人员还面临着开发完全没有电池的下一代…

vue中做一个最多输入一位小数且可以为负数的输入框(包含最前面最后面为小数点及多个-符号与前导零校验)

需求背景 日常开发中会有对input做校验的需求 例如做一个只可以输入一位小数及可以为负数的输入框 这时候会出现0开头、多个--、多个小数点插入或开头结尾为小数点的情况 实现过程 <el-inputstyle"width: 80px;"v-model"dataForm.low"input"l…

Ubuntu20.4 VPN+Docker代理配置

1.VPN:clash-for-Linux 首先配置VPN https://zhuanlan.zhihu.com/p/2852384493 2.配置docker 前面的步骤正常参照Ubuntu20.4配置docker的步骤 ubuntu20.04 安装docker (详细版)【24】_docker ubuntu image-CSDN博客 但是在run hello-world的时候总是显示超时连接 配置Doc…