当前位置: 首页 > article >正文

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

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

相关文章:

  • 视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点
  • Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)
  • Marscode AI辅助编程
  • 应用端sql慢查询监控分析
  • 使用Vue+Django开发的旅游路书应用
  • GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
  • 在Ubuntu上通过Docker部署NGINX服务器
  • 第三节:GLM-4v-9B数据加载之huggingface数据加载方法教程(通用大模型数据加载实列)
  • 96 vSystem
  • 区块链与比特币:技术革命的双子星
  • ImportError: DLL load failed while importing jiter
  • 工信部“人工智能+”制造行动点亮CES Asia 2025
  • 便捷的线上游戏陪玩、线下家政预约以及语音陪聊服务怎么做?系统代码解析
  • 基于Spring Boot的电影网站系统
  • K8S Ingress 服务配置步骤说明
  • 1114 Family Property (25)
  • 【环境搭建】Python、PyTorch与cuda的版本对应表
  • 在Vue2中,el-tree组件的页面节点前三角符号仅在有下级节点时显示
  • LeetCode 54. 螺旋矩阵 (C++实现)
  • Deformable DETR:Deformable Transformers for End-to-End Object Detection论文学习
  • 【从零开始入门unity游戏开发之——C#篇26】C#面向对象动态多态——接口(Interface)、接口里氏替换原则、密封方法(`sealed` )
  • Springboot项目本地连接并操作MySQL数据库
  • 数据结构概念介绍
  • Javascript数据结构——二叉树篇
  • 微信小程序xr-frame透明视频实现
  • 服务器证书原理