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进行数据管理,提高了开发效率,更方便开发好的应用发布和部署。

相关推荐
卑微的小鬼2 分钟前
如何保证数据库和缓存的一致性?
数据库·缓存
做一个AC梦15 分钟前
MiniOB环境部署开发(使用Docker)
数据库·sql·miniob·ob·海扬数据库
萧戈23 分钟前
如何为 Visual Studio 2019 安装 WDK
ide·visual studio
创可贴治愈心灵1 小时前
WPF中UI线程频繁操作造成卡顿的处理
ui·c#·wpf
Sadsvit1 小时前
网络聚合链路与软件网桥配置指南
linux·运维·服务器·网络·centos
___波子 Pro Max.2 小时前
Linux数字列排序命令
linux
qq_431280702 小时前
Visual Studio 在机台上远程调试详细教程
visual studio
ALLSectorSorft2 小时前
搭子交友 app 动态分享与打卡系统设计实现
java·服务器·数据库·人工智能·oracle·交友
wuyunhang1234562 小时前
Redis---事务
数据库·redis·缓存
满目8282 小时前
MongoDB 从入门到实践:全面掌握文档型 NoSQL 数据库核心操作
数据库·mongodb·非关系型数据库·文档型数据库·基础查询命令·进阶查询