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

embedded/2024/12/28 17:59:40/

《信管通低代码信息管理系统应用平台》开发环境就是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/embedded/148682.html

相关文章

美畅物联丨分布式锁实战:Spring Boot项目中的Redis应用

在分布式系统里&#xff0c;多个节点或许会同时对共享资源进行访问与操作。为防止出现数据不一致、资源竞争等状况&#xff0c;就需要一种机制来对这些并发访问加以协调&#xff0c;于是分布式锁就出现了。它如同一把全局的钥匙&#xff0c;在同一时刻仅有一个节点能够获取该钥…

【HarmonyOS 5.0】第十二篇-ArkUI公共属性(一)

一、公共样式类属性 ArkUI框架提供的基础组件直接或者间接的继承自 CommonMethod &#xff0c; CommonMethod 中定义的属性样式属于公共样式。下面就来学习这些样式 1.1.尺寸设置 宽高设置 设置组件的宽高&#xff0c;缺省时使用组件自身内容的宽高&#xff0c;比如充满父布…

信息安全管理与评估赛题第9套

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题九 模块一 网络平台搭建与设备安全防护 1 赛项时间 共计180分钟。 2 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 任务1 网络平台搭建 XX:XX- XX:XX 50 任务2…

[Unity Shader]【图形渲染】 数学基础4 - 矩阵定义和矩阵运算详解

矩阵是计算机图形学中的重要数学工具,尤其在Shader编程中,它被广泛用于坐标变换、投影变换和模型动画等场景。本文将详细介绍矩阵的定义、基本运算以及如何在Shader中应用矩阵,为初学者打下坚实的数学基础。 一、什么是矩阵? 矩阵是一个由数字排列成的长方形数组,通常记作…

无人零售 4G 工业无线路由器赋能自助贩卖机高效运营

工业4G路由器为运营商赋予 “千里眼”&#xff0c;实现对贩卖机销售、库存、设备状态的远程精准监控&#xff0c;便于及时补货与维护&#xff1b;凭借强大的数据实时传输&#xff0c;助力深度洞察销售趋势、优化库存、挖掘商机&#xff1b;还能远程升级、保障交易安全、快速处理…

【es6复习笔记】箭头函数(5)

简介 本教程将介绍如何在 JavaScript 中使用箭头函数&#xff0c;包括箭头函数的基本语法、特点以及在实际开发中的应用。通过本教程&#xff0c;你将学会如何使用箭头函数来简化代码&#xff0c;提高代码的可读性和简洁性。 箭头函数的基本语法 箭头函数是 ES6 引入的一种新…

加密货币地址的基本概念

什么是地址&#xff1f; 在日常生活中&#xff0c;地址可能指房屋、电子邮件或官网的位置&#xff0c;用来精确定位在系统中的特定位置或端点。在加密货币领域&#xff0c;地址也起着类似的基础作用&#xff0c;只不过是在数字环境中。 加密货币地址是区块链网络中使用的唯一…

Linux 环境下运行 .NET 8.0 core项目

在 Linux 环境下运行 .NET 8.0 项目&#xff0c;.NET 已支持跨平台运行&#xff0c;以下是完整的步骤&#xff1a; 1. 安装 .NET 8.0 SDK 或运行时 首先需要在 Linux 系统中安装 .NET 8.0 SDK 或运行时。 1.1 添加 Microsoft 包管理源 运行以下命令添加 Microsoft 包管理源并安…